如何在 Typescript 中使用 chai-as-promised?

Tch*_*nax 8 javascript unit-testing chai typescript chai-as-promised

我正在尝试将chai-as-promised包与 TypeScript一起使用。首先,以下代码在简单的 JavaScript 中运行良好。

import * as chai from 'chai';
import * as chaiAsPromised from 'chai-as-promised';

chai.use(chaiAsPromised);
const expect = chai.expect;

import * as sinon from 'sinon';

import { MyClass } from '.';

describe('Test my class', () => {
  let myClass: MyClass;

  beforeEach(() => {
    myClass = new MyClass();
   });

  it('Should render home', () => {
    const req = new RequestMock();
    const res = new ResponseMock();

    return expect(myClass.getHomePage(req, res)).to.be.fulfilled()
      .then((returnedValue) => {
        chai.expect(returnedValue).to.not.be.equal([]);
      });
  });
});
Run Code Online (Sandbox Code Playgroud)

这段代码出现以下错误:

在此处输入图片描述

...它指出了这一点:

interface PromisedTypeComparison {
    (type: string, message?: string): PromisedAssertion; // <<-- 
    instanceof: PromisedInstanceOf;
    instanceOf: PromisedInstanceOf;
}
Run Code Online (Sandbox Code Playgroud)

我测试了很多机会,这是我最接近我认为的解决方案的机会。

我想使用chai-as-promiselike fullfulled, rejected... 等的功能。

我怎样才能做到?

Fra*_*ans 11

我认为这个答案正是您所需要的:

添加和 的类型chai-as-promised,以解决 TypeScript 错误:

npm install --save-dev @types/chai-as-promised

为我工作。之前,我得到“属性‘最终’在‘断言’类型上不存在。”;添加此后,每个人都很高兴:-)

确实必须将我的更改importrequire.

前:

import chaiAsPromised from 'chai-as-promised';
Run Code Online (Sandbox Code Playgroud)

后:

import chaiAsPromised = require('chai-as-promised');
Run Code Online (Sandbox Code Playgroud)


小智 5

只需导入默认值,chai-as-promised一切都会起作用:

import * as chai from 'chai'    
import chaiAsPromised from 'chai-as-promised'
chai.use(chaiAsPromised)
Run Code Online (Sandbox Code Playgroud)


Jzo*_*zop 0

我认为您在断言中缺少“.最终”或“.成为”。尝试将其重写为

expect(myClass.getHomePage(req, res)).to.eventually.be.fulfilled;
Run Code Online (Sandbox Code Playgroud)