使用带有 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没有解决该承诺。eventuallyconvertToStringEqual


chai-as-promised在将承诺传递给我的自定义断言方法之前,如何等待该承诺?


慕尼黑的夜晚无繁华
浏览 116回答 1
1回答

富国沪深

首先加载您的自定义插件,然后添加chai-as-promise. 与加载插件的顺序有关。来自#installation-and-setup使用其他 Chai 插件时请注意:Chai as Promised 会在安装时查找所有当前注册的断言器并承诺它们。因此,如果您希望其断言器被 Promisified,则应在任何其他 Chai 插件之后将 Chai 安装为 Promised last 。例如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, utils) {  var Assertion = chai.Assertion;  Assertion.addMethod('convertToStringEqual', function(input) {    new Assertion(this._obj.toString()).to.equal(input.toString());  });});chai.should();
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript