Jasmine Test:对象不支持属性或方法

时间:2014-07-01 09:54:44

标签: javascript jasmine

我刚刚发现了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'

这是由于加载顺序还是什么?

2 个答案:

答案 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");
})