我正在使用Jasmine 2.1.3并尝试创建一个自定义匹配器来对两个数字求和。
但是我得到了:
Expected 24 not to equal 12
到目前为止我已经
了it("is 24 for 24", function() {
result = simpleMath.sum_of(12,12); // gets 24
expect(result).toBeSumOf([12,12]);
});
和
beforeEach(function() {
simpleMath = new SimpleMath();
jasmine.addMatchers({
toBeSumOf: function (util, customEqualityTesters) {
return {
compare: function(actual, expected) {
// var passed = actual == expected // comparison example that worked
var passed = (actual[0]+actual[1]) == expected;
return {
pass: passed,
message: 'Expected ' + actual + (passed ? '' : ' not') + ' to equal ' + expected
};
}
};
}
});
});
答案 0 :(得分:1)
您的实际和预期是错误的方式,只需添加:
console.log(actual);
console.log(expected);
对于您的匹配器,您会看到,您可以使用参数12,12或[12,12]的任一格式,但对于前者,您需要添加另一个参数,因此阵列格式可能更可取。你当然可以使用一个对象,如果这有助于更复杂的比较/匹配。
工作(基于数组)示例:
describe("My custom test", function() {
it("should work", function() {
var result = 12 + 12;
expect(result).toBeSumOf([12, 12]);
});
});
和
beforeEach(function () {
jasmine.addMatchers({
toBeSumOf: function () {
return {
compare: function (actual, expected) {
var passed = (actual == expected[0] + expected[1]);
return {
pass: passed,
message: 'Expected value ' + (expected[0] + expected[1]) + (passed ? '' : ' not') + ' equal to ' + actual
};
}
};
}
});
});
给出:
更改其中一个值会产生: