为了完成这样的工作:
expect(3).toBeIn([6,5,3,2]);
Jasmine 有一个称为匹配器的功能:
这是一个关于如何声明它们的示例。我在最后声明了您正在寻找的方法:
describe('Calculator', function(){
var obj;
beforeEach(function(){
//initialize object
obj = new Object();
jasmine.addMatchers({
toBeFive: function () {
return {
compare: function (actual, expected) {
return {
pass: actual === 5,
message: actual + ' is not exactly 5'
}
}
};
},
toBeBetween: function (lower,higher) {
return {
compare: function (actual, lower,higher) {
return {
pass: ( actual>= lower && actual <= higher),
message: actual + ' is not between ' + lower + ' and ' + higher
}
}
};
},
toBeIn: function(expected) {
return {
compare: function (actual, expected) {
return {
pass: expected.some(function(item){ return item === actual; }),
message: actual + ' is not in ' + expected
}
}
};
}
});
});
这是你需要的匹配器:
toBeIn: function(expected) {
return {
compare: function (actual, expected) {
return {
pass: expected.some(function(item){ return item === actual; }),
message: actual + ' is not in ' + expected
}
}
};
}
重要与 jasmine 2.0。我必须将 jasmine.addMatchers({ 与 jasmine specrunner.html 一起使用,但是当我使用 Karma 配置它时,我必须将 jasmine 替换为 this 之类的this.addMatchers({ 因为 Karma 使用的是早期版本的 Jasmine。