首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用自定义chai方法断言和所承诺的chai-as

使用自定义chai方法断言和所承诺的chai-as
EN

Stack Overflow用户
提问于 2020-12-23 04:09:38
回答 1查看 196关注 0票数 1

我想添加这样的自定义断言/方法:

代码语言:javascript
复制
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在将承诺传递给convertToStringEqual之前并没有用eventually来解决这个问题。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-23 08:37:02

首先加载您的自定义插件,然后添加chai-as-promise。与加载插件的顺序相关。

来自#安装和安装

注意:当使用其他柴氏插件时,正如承诺的那样,才能在安装时找到所有当前注册的断言器并对它们进行升级。因此,如果您希望的断言得到改进,那么您应该按照上一次的承诺,在任何其他柴氏插件之后安装柴氏。

例如。

代码语言:javascript
复制
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);
  });
});

单元测试结果:

代码语言:javascript
复制
  65418901
    ✓ should pass


  1 passing (52ms)

但是,像这样加载插件是行不通的:

代码语言:javascript
复制
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();
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65418901

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档