定制茉莉花匹配器和量角器

时间:2015-07-28 18:03:13

标签: javascript angularjs testing jasmine protractor

我们添加了toHaveClass 自定义茉莉花匹配器,为了使其正常工作,我们必须将其添加到beforeEach()(借助于this topic)。

并且,为了遵循DRY原则并避免在需要beforeEach()的规范中的每个toHaveClass中重复匹配器定义,我们已将beforeEach()块添加到onPrepare()

onPrepare: function () {
    var jasmineReporters = require("jasmine-reporters");
    require("jasmine-expect");

    // ...

    // custom matchers
    beforeEach(function() {
        jasmine.addMatchers({
            toHaveClass: function() {
                return {
                    compare: function(actual, expected) {
                        return {
                            pass: actual.getAttribute("class").then(function(classes) {
                                return classes.split(" ").indexOf(expected) !== -1;
                            })
                        };
                    }
                };
            }
        });
    });
},

它实际上有效,但每当我看到量角器配置中的beforeEach()块时,我就会产生微抑郁和强烈的感觉,它不是定义匹配器的好地方。

问题:

是否有更好的方法或地点可以定义自定义匹配器?

1 个答案:

答案 0 :(得分:8)

我看到的最简单的解决方案是将此beforeEach块移动到一个单独的文件中,并在onPrepare内部使用它,就像使用供应商库一样:

onPrepare: function () {
    var jasmineReporters = require("jasmine-reporters");
    require("jasmine-expect");
    require('./tests/support/jasmine-custom-matchers'); // inject custom matchers
    // ....
}

beforeEach的代码不需要任何更改:

// /tests/support/jasmine-custom-matchers.js

beforeEach(function() {
    jasmine.addMatchers({
        toHaveClass: function() {
            return {
                compare: function(actual, expected) {
                    return {
                        pass: actual.getAttribute("class").then(function(classes) {
                            return classes.split(" ").indexOf(expected) !== -1;
                        })
                    };
                }
            };
        }
    });
});

我不认为您应该export来自此文件的内容,它只会require生效。