ale*_*cxe 14 javascript testing jasmine angularjs protractor
我们添加了一个toHaveClass 自定义的茉莉花匹配器,为了使其工作,我们不得不将其添加到beforeEach()(在本主题的帮助下).
并且,为了遵循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;
})
};
}
};
}
});
});
},
Run Code Online (Sandbox Code Playgroud)
它实际上是有效的,但是每当我看到beforeEach()量角器配置中的块时,我就会有一种微观凹陷和强烈的感觉,它不是定义匹配器的好地方.
问题:
是否有更好的方法或地点来定义自定义匹配器?
我看到的最简单的解决方案是将此beforeEach块移动到一个单独的文件中,并将其置于内部onPrepare,就像使用供应商库一样:
onPrepare: function () {
var jasmineReporters = require("jasmine-reporters");
require("jasmine-expect");
require('./tests/support/jasmine-custom-matchers'); // inject custom matchers
// ....
}
Run Code Online (Sandbox Code Playgroud)
代码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;
})
};
}
};
}
});
});
Run Code Online (Sandbox Code Playgroud)
我不认为你应该export从这个文件中得到什么,它只会通过它来生效require.
| 归档时间: |
|
| 查看次数: |
1908 次 |
| 最近记录: |