如何在 Mocha 中实现 addMatchers?
How do I implement addMatchers in Mocha?
我正在阅读使用 Jasmine 教授 BDD 的《使用 CoffeScript 进行测试》一书,但我使用的是 Mocha/Chai,并遇到了这段代码:
beforeEach ->
@addMatchers
toBeDiscounted: (orig,discount) ->
actual = @actual
@message = -> "Expected #{actual} to be #{discount}% of #{orig}"
actual is (orig * (1-(discount/100)))
然后在测试中:
it "should persist the discount", ->
expect(test.basket.applyDiscount(10)).toBeDiscounted(50, 10)
我如何在 Mocha/Chai 中执行此操作?
Jasmine 匹配器相当于 Chai Helpers 在 Mocha/Chai 土地上。
您将需要更新您的规范助手以包含 Custom Chai Helper。然后,您需要编写 Chai Helper 本身;使其扩展 Chai 以添加 discounted
函数。
spec/spec-helper.js
var chai = require('chai');
var chaiDiscounted = require('./helpers/discounted.js')
chai.use(chaiDiscounted);
spec/helpers/discounted.js
function discount(x, discount) {
return x * (1 - (discount / 100));
}
module.exports = function(chai) {
var Assertion = chai.Assertion;
Assertion.addMethod('discounted', function (y, p) {
var obj = this._obj;
new Assertion(obj).to.be.a('number');
this.assert(
obj === discount(y, p)
, "expected #{this} to be " + y + "% of " + p
, "expected #{this} to not be " + y + "% of " + p
);
});
}
然后您应该能够做到:
expect(foo).to.be.discounted(50, 10)
抱歉,我还没有测试过。另外,我很抱歉这是在 Javascript(不是 Coffeescript)中...但希望它能帮助您指明正确的方向。
我正在阅读使用 Jasmine 教授 BDD 的《使用 CoffeScript 进行测试》一书,但我使用的是 Mocha/Chai,并遇到了这段代码:
beforeEach ->
@addMatchers
toBeDiscounted: (orig,discount) ->
actual = @actual
@message = -> "Expected #{actual} to be #{discount}% of #{orig}"
actual is (orig * (1-(discount/100)))
然后在测试中:
it "should persist the discount", ->
expect(test.basket.applyDiscount(10)).toBeDiscounted(50, 10)
我如何在 Mocha/Chai 中执行此操作?
Jasmine 匹配器相当于 Chai Helpers 在 Mocha/Chai 土地上。
您将需要更新您的规范助手以包含 Custom Chai Helper。然后,您需要编写 Chai Helper 本身;使其扩展 Chai 以添加 discounted
函数。
spec/spec-helper.js
var chai = require('chai');
var chaiDiscounted = require('./helpers/discounted.js')
chai.use(chaiDiscounted);
spec/helpers/discounted.js
function discount(x, discount) {
return x * (1 - (discount / 100));
}
module.exports = function(chai) {
var Assertion = chai.Assertion;
Assertion.addMethod('discounted', function (y, p) {
var obj = this._obj;
new Assertion(obj).to.be.a('number');
this.assert(
obj === discount(y, p)
, "expected #{this} to be " + y + "% of " + p
, "expected #{this} to not be " + y + "% of " + p
);
});
}
然后您应该能够做到:
expect(foo).to.be.discounted(50, 10)
抱歉,我还没有测试过。另外,我很抱歉这是在 Javascript(不是 Coffeescript)中...但希望它能帮助您指明正确的方向。