gpt4 book ai didi

javascript - 在 Mocha/Chai 中测试被拒绝的 promise

转载 作者:可可西里 更新时间:2023-11-01 01:46:59 26 4
gpt4 key购买 nike

我有一个拒绝 promise 的类:

Sync.prototype.doCall = function(verb, method, data) {
var self = this;

self.client = P.promisifyAll(new Client());

var res = this.queue.then(function() {
return self.client.callAsync(verb, method, data)
.then(function(res) {
return;
})
.catch(function(err) {
// This is what gets called in my test
return P.reject('Boo');
});
});

this.queue = res.delay(this.options.throttle * 1000);
return res;
};

Sync.prototype.sendNote = function(data) {
var self = this;
return self.doCall('POST', '/Invoice', {
Invoice: data
}).then(function(res) {
return data;
});
};

在我的测试中:

return expect(s.sendNote(data)).to.eventually.be.rejectedWith('Boo');

然而,当测试通过时,它会将错误抛出到控制台。

未处理的拒绝错误:Boo ...

对于非 promise 错误,我使用 bind 来测试以防止在 Chai 可以包装和测试之前抛出错误:

return expect(s.sendNote.bind(s, data)).to.eventually.be.rejectedWith('Boo');

但是这不适用于此并返回:

TypeError: [Function] 不是 thenable。

对此进行测试的正确方法是什么?

最佳答案

(免责声明:即使对于不使用 Bluebird 的人来说,这也是一个好问题。我发布了一个类似的答案 here ;这个答案适用于不使用 Bluebird 的人。)

像 promise 的那样

以下是如何使用 chai-as-promised 来测试 Promise 的 resolvereject 案例:

var chai = require('chai');
var expect = chai.expect;
var chaiAsPromised = require("chai-as-promised");
chai.use(chaiAsPromised);

...

it('resolves as promised', function() {
return expect(Promise.resolve('woof')).to.eventually.equal('woof');
});

it('rejects as promised', function() {
return expect(Promise.reject('caw')).to.be.rejectedWith('caw');
});

没有像 promise 的那样

你可以在没有 chai-as-promised 的情况下完成同样的事情:

it('resolves as promised', function() {
return Promise.resolve("woof")
.then(function(m) { expect(m).to.equal('woof'); })
.catch(function(e) { throw e }) // use error thrown by test suite
;
});

it('rejects as promised', function() {
return Promise.reject("caw")
.then(function(m) { throw new Error('was not supposed to succeed'); })
.catch(function(m) { expect(m).to.equal('caw'); })
;
});

关于javascript - 在 Mocha/Chai 中测试被拒绝的 promise ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31845329/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com