如何解决使用带有 chai-as-promised 的自定义 chai 方法断言
chai.use(function (chai,utils) {
var Assertion = chai.Assertion;
Assertion.addMethod("convertToStringEqual",function (input) {
new Assertion(this._obj.toString()).to.equal(input.toString());
});
});
但是我希望能够像这样将它与 chai-as-promised
一起使用:
Promise.resolve(2 + 2).should.eventually.convertToStringEqual(4);
但是当我运行这个例子时,我看到了这个错误:
AssertionError: expected '[object Promise]' to equal '4'
这是因为 chai-as-promised
在将其传递给 eventually
之前没有使用 convertToStringEqual
解析该承诺。
在将它传递给我的自定义断言方法之前,如何让 chai-as-promised
等待该承诺?
解决方法
首先加载您的自定义插件,然后添加 chai-as-promise
。与加载插件的顺序有关。
使用其他 Chai 插件时的注意事项:Chai as Promised 会在安装时找到所有当前注册的断言并承诺它们。 因此,如果您希望他们的断言者被承诺,您应该在任何其他 Chai 插件之后安装 Chai 作为最后承诺。
例如
const chai = require('chai');
const chaiAsPromised = require('chai-as-promised');
chai.use(function(chai,utils) {
var Assertion = chai.Assertion;
Assertion.addMethod('convertToStringEqual',function(input) {
new Assertion(this._obj.toString()).to.equal(input.toString());
});
});
chai.use(chaiAsPromised);
chai.should();
describe('65418901',() => {
it('should pass',() => {
return Promise.resolve(2 + 2).should.eventually.convertToStringEqual(4);
});
});
单元测试结果:
65418901
✓ should pass
1 passing (52ms)
但是,像这样加载插件是行不通的:
chai.use(chaiAsPromised);
chai.use(function(chai,function(input) {
new Assertion(this._obj.toString()).to.equal(input.toString());
});
});
chai.should();
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。