gpt4 book ai didi

javascript - 如何使用 sinon 测试 mocha 中的多个回调?

转载 作者:行者123 更新时间:2023-12-03 01:47:18 25 4
gpt4 key购买 nike

我有一个带有异步代码和多个回调的函数

var f = (cb1, cb2) => {
return new Promise((resolve, reject) => { /* ... */ });
};

在我的测试中,我用 sinon 创建了 tupies

var cb1Spy = sinon.spy();
var cb2Spy = sinon.spy();

为了测试它们是否都被称为我有一个测试

it('test', (done) => {
var cbCount = 2;
var checkIfDone = () => {
if(--cbCount === 0){
done()
}
};
f(
() => { cb1Spy; checkIfDone(); },
() => { cb2Spy; checkIfDone(); }
);
});

它可以工作,但感觉不对。有关于这种测试的最佳实践吗?

最佳答案

Mocha 中的 done 回调专门用于测试异步代码,并不是直接控制成功或失败的方法。

导致测试失败的主要方法应该是抛出 Error 对象,最好带有指示失败原因的消息。 断言是如果不满足某些特定条件就会抛出此类错误的语句。有很多库可以实现此目的,其中 chai据我所知是最受欢迎的。

诗农本身comes with some assertions与其测试替身一起使用。例如,如果您想断言 cb1Spy 被调用一次,您可以这样写:

sinon.assert.calledOnce(cb1Spy);

如果您最终使用 chai,有一个不错的插件,名为 sinon-chai您可以使用它使 sinon 断言看起来更类似于 chai 的断言,从而为您的测试提供更一致的语法。如果您使用它,您可以像这样编写测试:

const chai = require('chai');
const sinon = require('sinon');
const sinonChai = require('sinon-chai');
const { expect } = chai;
chai.use(sinonChai);

describe('whatever', function() {
it('test', function() {
let cb1Spy = sinon.spy();
let cb2Spy = sinon.spy();

f(cb1Spy, cb2spy);

expect(cb1Spy).to.have.been.calledOnce;
expect(cb2Spy).to.have.been.calledOnce;
});
});

关于javascript - 如何使用 sinon 测试 mocha 中的多个回调?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50580634/

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