为什么我的 chai-as-promised 拒绝方法不起作用?

问题描述 投票:0回答:2

我按照承诺使用摩卡、柴和柴。 测试应该会失败,但不会,我不知道哪里出了问题,有什么建议吗?

const { describe, it } = require('mocha')
const chai = require('chai')
const { expect } = require('chai')
const chaiAsPromised = require('chai-as-promised')

chai.use(chaiAsPromised)

describe('test', () => {
    it('must be rejected', async () => {
        expect(Promise.resolve('success')).to.rejected
    })
})

我试图测试一个应该被拒绝并且测试应该失败的promise,但是测试成功了

javascript testing mocha.js chai chai-as-promised
2个回答
0
投票

“Promise.resolve() 解决一个承诺,这与履行或拒绝承诺不同。” (参见https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/resolve

如果你想写一个“虚拟测试”,看看你是否能发现一个承诺被拒绝,做类似的事情:

let promise = new Promise((resolve, reject) => reject('Failure'));
expect(promise).to.eventually.be.rejectedWith('Failure');

0
投票

来自Chai as Promised 文档

注意:return 或 notify(done) 必须与 promise 断言一起使用。这可能与项目或团队使用的现有断言格式略有不同。那些其他断言可能是同步的,因此不需要特殊处理。

Chai as Promised 提供的最强大的扩展是最终属性。有了它,您可以将任何现有的 Chai 断言转换为一个基于承诺的断言

您可以使用

async / await
.then(() => {})
在测试中包含多个承诺。

这四个测试会失败:

const { describe, it } = require('mocha');
const chai = require('chai');
const { expect } = require('chai');
const chaiAsPromised = require('chai-as-promised');

chai.use(chaiAsPromised);

describe('test1', () => {
  it('must be rejected (1)', () => {
    return expect(Promise.resolve('success')).to.eventually.be.rejected;
  });
});

describe('test2', () => {
  it('must be rejected (2)', (done) => {
    expect(Promise.resolve('success')).to.eventually.be.rejected.notify(done);
  });
});

describe('test3', () => {
  it('must be rejected (1)', async () => {
    await expect(Promise.resolve('success1')).to.eventually.be.fulfilled;
    return expect(Promise.resolve('success2')).to.eventually.be.rejected;
  });
});

describe('test4', () => {
  it('must be rejected (1)', () => {
    return expect(Promise.resolve('success1')).to.eventually.be.fulfilled.then(
      () => expect(Promise.resolve('success2')).to.eventually.be.rejected
    );
  });
});

实例:https://stackblitz.com/edit/node-ooc3jh?file=index.js

© www.soinside.com 2019 - 2024. All rights reserved.