introduction.js
Jasmine是Javascript行为驱动测试开发框架,它并不依赖其他任何开发框架,也不需要DOM结构的支持。本指南在Jasmine version1.2.0 revision 1337006083测试通过。
Suite:describe Your Tests
一个测试suite以Jasmine全局函数describe声明,它带有两个参数:一个字符串和一个函数。字符串是该suite的名称,函数则实现了该suite。
Specs
Specs由Jasmine全局函数it定义,和describe一样,它带有两个参数。字符串是specs名称,函数定义了specs;一个spec包含了一个或多个expectations来测试代码。expectation在Jasmine中是断言,可能为true或false。一个spec里面所有expectations都为true,则该spec通过。如果有一个或多个expectations值为false,则spec失败。
It's Just Functions
由于describe和it都是函数,所以它们中可以包含任何可执行代码来完成测试。在describe中定义定义的变量在所有it函数中都可以使用。
Expectations
Expectation是通过expect函数构建的,它只需要一个参数:实际值;它的返回值可以链接一个Matcher函数,该函数带有一个参数:预计值;
Matchers
每一个Matcher都比较实际值和预计值,通过这种方式来使得spec获得通过或失败;
任何Matcher可以通过在函数调用链钟调用not属性反转断言;
Included Matchers
Jasmine自带有大量的Matcher。当然,你也可以根据自己特殊的需要自定义Matcher;
Grouping Related Specs with describe
describe用于将相关的spec聚集起来。describe中定义的名称能和spec中定义的名称连结成为spec的全名;
Setup and Teardown
Jasmine提供了beforeEach和afterEach函数来为你suite中的所有spec提供通用的在测试前的准备和测试后处理操作。
Nesting describe Blocks
对describe的调用可以嵌套。这允许suite由树状的函数组成。在spec被执行前,Jasmine遍历树状结构执行所有beforeEach函数;在所有spec执行后,Jasmine遍历执行afterEach函数。
Disabling Specs and Suites
Suite和Spec可以使用xdescribe和xit停用。这些Spec和Suite将会跳过而不被执行。
Spies
Spy可以记录函数调用以及赋予它的参数。以下是一些特殊的用户Spy的Matcher:toHaveBeenCalled,toHaveBeenCalledWith等;
Spies:andCallThrough
通过addCallThrough函数链接Spy,Spy仍然会记录函数调用等信息。但是函数的实际实现将被委托(个人理解是实现的函数已经不具有原先的功能了);
Spies:andReturn
通过addReturn函数链接Spy,Spy会返回特定的值;
Spies:andCallFake
通过addCallFake可以使用自定义的函数替换掉原函数的调用;
Spies:createSpy
当没有函数可以被查看时,可以使用createSpy创建一个空的Spy,它可以用于记录调用,参数使用等信息,但是内部没有实际的实现;
Spies:createSpyObj
通过createSpyObj可以创建拥有一系列Spy的对象;
Matching Anything with jasmine.any
jasmine.any需要一个构造函数作为参数,当实际值的构造函数和该参数相同时候返回true;
Mocking the Javascript Clock
Jasmine Mock Clock可用于对于setTimeout和setInterval的测试。它的使用使得计时器代码仿佛在同步(sync)等待运行;Clock通过jasmine.Clock.useMock初始化,通过jasmine.Clock.tick来同步计时;
Asynchronous Support
Jasmine支持异步操作测试,通过在Spec中调用一系列的runs块,并在块末尾调用异步函数。
对于异步支持的功能还不理解;
The Runner and Reporter
Jasmine必须运行在javascript环境中,如网页。
它通过创建HTMLReporter来报告最后的spec和suite结果;
引用:http://pivotal.github.com/jasmine/