我们添加了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()
块时,我就会产生微抑郁和强烈的感觉,它不是定义匹配器的好地方。
问题:
是否有更好的方法或地点可以定义自定义匹配器?
答案 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
生效。