我刚刚发现了Jasmine框架,我正在尝试它,虽然我应该尝试编写自定义匹配器,因为它听起来非常有用。我这样做了:
describe('Hello World', function() {
beforeEach(function() {
this.addMatchers({
toBeDivisbleByTwo: function() {
var result = {
pass: (this.actual % 2) === 0
};
if(result.pass) {
result.message = 'this is divisible by two';
} else {
result.message = 'this is not divisible by two';
}
return result;
}
});
});
});
describe('Hello world', function() {
it('divisible by two', function() {
expect(evenNumberGenerator()).toBeDivisbleByTwo();
});
});
但是当我运行该页面时,我在Internet Explorer中遇到此错误:
TypeError:Object不支持属性或方法'toBeDivisbleByTwo'
这是由于加载顺序还是什么?
答案 0 :(得分:2)
beforeEach
个函数仅适用于it
中写入的describe
函数以及该函数中的任何嵌套describe
。要解决您的问题,您可以将第二个describe
嵌入第一个describe
或完全删除第二个it
,并将it
放在第一个describe
内。由您决定如何组织测试,但在这种情况下,我建议使用第二个选项,因为您在第一个describe
中没有it
个函数。此外,describe('Even number generator', function() {
beforeEach(function() {
//Your matcher
});
it('should return a number that is divisible by two', function() {
expect(evenNumberGenerator()).toBeDivisbleByTwo();
});
});
和{{1}}的Jasmine语法应该像普通英语一样阅读。所以你可以拥有类似的东西......
{{1}}
这有助于组织和理解您的测试。
答案 1 :(得分:1)
您也可以使用Prolific库,它与Jasmine< 2.0
一起使用https://github.com/Bitterbrown/prolific
(是的,我承认,我是开发人员:)) 你可以添加自定义匹配器,你可以在自述文件中找到它(我刚刚更新了它)
基本上,在包括多产之后,你可以做到:it("should be divisible by 2", function () {
assume("var evenNumberGenerator() is divisible by 2");
})