我正在使用 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
};
}
};
}
});
});
最佳答案
您的实际和预期是错误的,只需添加:
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
};
}
};
}
});
});
给予:
更改其中一个值会给出:
关于javascript - Jasmine - 如何编写自定义匹配器来求和两个数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44071365/