Karma和Jasmine的基本了解,参考另一篇文章Angularjs官方示例项目之单元测试套件karma-jasminepython
TBDgit
Jasmine的官方文档参考:Jasmine Behavior-Driven JavaScript Documentation 上面有很一个很详细的测试示例。github
Jasmine的核心套件是describe()函数,它是一个全局函数,能够在测试时被全局调用。数组
describe(specName, function(){})函数有两个参数,分别是细则spec套件的名字和测试套件的函数。describe()是能够嵌套的,也就是说能够在一个describe()的第二个参数函数中,再定义个describe()。函数
经过调用it()全局函数来在describe()中定义一个细则spec。单元测试
describe('A spec suite', functoin(){ it('constains a equal spec', { expect(true).toBe(ture); }); });
一个describe()中能够有多个细则spec,同时,一个spec细则中也能够有多个预期expect断言项。可是,只有一个细则中因此的断言项目都经过,才算是经过一个细则spec。测试
beforeEach(functon) 传入的参数是一个函数,该函数会在每一个细则describe运行以前被调用。ui
同理,afterEach(function)则是在每一个细则describe运做以后被调用。this
测试时,咱们是想要知道某个断言条件下应用是符合咱们的预期expect的。好比:“若是咱们点击了这个按钮,咱们会指望有什么结果。”在jasmine中,使用expect(needTestedValue)函数来建立这个预期,其参数表示咱们真实的须要被测试的值。
spa
相应的,有须要测试的值,就有咱们期待的值。这个期待值就保存在匹配器macher,好比内置的toBe(expectedValue)中。
最后的语法相似与
expect(needTestedValue).macher(expectValue)
一个代码示例以下:
describe('A spec suite', functoin(){ it('constains a equal spec', { expect(true).toBe(ture); }); // you can use 'not' it('constains a not equal spec', { expect(true).not.toBe(false); }); });
内置的匹配器有:
//比较x和y是否值相等,至关于== expect(x).toEqual(y); //比较x和y是否不相等 expect(x).not.toEqual(y); //比较x和y是不是相同的对象,至关于JavaScript中的"===" expect(x).toBe(y); //比较x是否匹配pattern正则 expect(x).toMatch(pattern); //x是否为undefined expect(x).toBeDefined(); //x是否为null expect(x).toBeNull(); //x是否为true expect(x).toBeTruthy(); //x是否为false expect(x).toBeFalsy(); //y是在数组x中(x能够是字符串或数组) expect(x).toContain(y); //x是否比y小 expect(x).toBeLessThan(y); //x是否比y大 expect(x).toBeGreaterThan(y); //x是否在一个指定的浮点精度内与y相近 expect(x).toBeCloseTo(y); //函数是否抛出异常 expect(fn).toThrow(e);
自定义方法是在Jasmine块中调用addMachers()函数
describe('A spec suite', functoin(){ tihs.addMachers({ customerMacher: function(expected) { // customer rule return this.actual <= expected; } }); });
这样就能够在测试套件中使用自定义的 customerMacher 匹配器了。