为了账号安全,请及时绑定邮箱和手机立即绑定

使用带有 chai-as-promised 的自定义 chai 方法断言

使用带有 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没有解决该承诺。eventuallyconvertToStringEqualchai-as-promised在将承诺传递给我的自定义断言方法之前,如何等待该承诺?
查看完整描述

1 回答

?
富国沪深

TA贡献1790条经验 获得超9个赞

首先加载您的自定义插件,然后添加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();


查看完整回答
反对 回复 2024-01-18
  • 1 回答
  • 0 关注
  • 114 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信