Google JS Test是一个运行于V8 JavaScript引擎下的Javascript单元测试框架,其在Google内部负责对Chrome的快速JS执行速度进行测试,现在Google以开源工程开放大家使用。Google JS Test主要特性:
- 超快的启动速度和执行时间,不需要在浏览器里运行
- 清爽而具有可读性的输出内容
- 也有一个可选的基于浏览器的测试器,可在JS修改的时候刷新
- 其样式和语义跟Google Test for C++类似
- 内置的Mocking框架只需要最简单的样板代码(比如no $tearDown or $verifyAll 请求),其样式和语义基于Google C++ Mocking Framework
- 匹配系统允许表达式测试,并可直观的阅读输出的错误提示,内置了很多匹配器,用户也可自行添加
01 | function UserInfoTest() { |
02 | // Each test function gets its own instance of UserInfoTest, so tests can |
03 | // use instance variables to store state that doesn't affect other tests. |
04 | // There's no need to write a tearDown method, unless you modify global |
07 | // Create an instance of the class under test here, giving it a mock |
08 | // function that we also keep a reference to below. |
09 | this .getInfoFromDb_ = createMockFunction(); |
10 | this .userInfo_ = new UserInfo( this .getInfoFromDb_); |
12 | registerTestSuite(UserInfoTest); |
14 | UserInfoTest.prototype.formatsUSPhoneNumber = function () { |
15 | // Expect a call to the database function with the argument 0xdeadbeef. When |
16 | // the call is received, return the supplied string. |
17 | expectCall( this .getInfoFromDb_)(0xdeadbeef) |
18 | .willOnce(returnWith( 'phone_number: "650 253 0000"' )); |
20 | // Make sure that our class returns correctly formatted output. |
21 | expectEq( '(650) 253-0000' , this .userInfo_.getPhoneForId(0xdeadbeef)); |
24 | UserInfoTest.prototype.returnsLastNameFirst = function () { |
25 | expectCall( this .getInfoFromDb_)(0xdeadbeef) |
26 | .willOnce(returnWith( 'given_name: "John" family_name: "Doe"' )); |
28 | // Make sure that our class puts the last name first. |
29 | expectEq( 'Doe, John' , this .userInfo_.getNameForId(0xdeadbeef)); |
项目地址: http://code.google.com/p/google-js-test/