使用 chai 和 sinon 在一个方法中添加一个 promise
Stubbing out a promise inside a method using chai and sinon
我测试的功能大概是这样的;
function doThing(data, callback) {
externalService.post('send').request(data)
.then(() => {
if (callback) { callback(); }
})
.catch((message) => {
logger.warn('warning message');
if (callback) { callback(); }
});
}
我正在尝试使用 Chai 和 Sinon 对此进行测试。
我试过遵循不同的指南,我现在的咒语是这样的;
const thingBeingTested = require('thing-being-tested');
const chai = require('chai');
const sinon = require('sinon');
require('sinon-as-promised');
const sinonChai = require('sinon-chai');
const expect = chai.expect;
var chaiAsPromised = require('chai-as-promised');
chai.use(chaiAsPromised);
chai.use(sinonChai);
describe('The Thing', () => {
it('should run a callback when requested and successful', done => {
const externalService = { post: { request: sinon.stub() } };
const callback = sinon.spy();
externalService.post.request.resolves(callback);
doThing({...}, callback);
expect(callback).to.have.been.called;
done();
});
});
我无法正确删除 externalService.post
。任何帮助将不胜感激。
我对 Chai 和 Sinon 完全陌生——所以我很期待做一些愚蠢的事情。
您的 doThing
函数无法从您的测试中访问 const externalService
。我会假设你的主文件有类似
const externalService = require('./external_service');
得到它。
在你的测试中你也应该得到相同的 externalService
:
describe(..., () => {
it(..., () => {
// adjust the path accordingly
const externalService = require('./external_service');
然后模拟它的方法:
sinon.stub(externalService, 'post').returns({
request: sinon.stub().resolves(callback)
});
然后你可以调用doThing
并分析结果。
测试完成后不要忘记通过
恢复原来的post
externalService.post.restore();
我测试的功能大概是这样的;
function doThing(data, callback) {
externalService.post('send').request(data)
.then(() => {
if (callback) { callback(); }
})
.catch((message) => {
logger.warn('warning message');
if (callback) { callback(); }
});
}
我正在尝试使用 Chai 和 Sinon 对此进行测试。
我试过遵循不同的指南,我现在的咒语是这样的;
const thingBeingTested = require('thing-being-tested');
const chai = require('chai');
const sinon = require('sinon');
require('sinon-as-promised');
const sinonChai = require('sinon-chai');
const expect = chai.expect;
var chaiAsPromised = require('chai-as-promised');
chai.use(chaiAsPromised);
chai.use(sinonChai);
describe('The Thing', () => {
it('should run a callback when requested and successful', done => {
const externalService = { post: { request: sinon.stub() } };
const callback = sinon.spy();
externalService.post.request.resolves(callback);
doThing({...}, callback);
expect(callback).to.have.been.called;
done();
});
});
我无法正确删除 externalService.post
。任何帮助将不胜感激。
我对 Chai 和 Sinon 完全陌生——所以我很期待做一些愚蠢的事情。
您的 doThing
函数无法从您的测试中访问 const externalService
。我会假设你的主文件有类似
const externalService = require('./external_service');
得到它。
在你的测试中你也应该得到相同的 externalService
:
describe(..., () => {
it(..., () => {
// adjust the path accordingly
const externalService = require('./external_service');
然后模拟它的方法:
sinon.stub(externalService, 'post').returns({
request: sinon.stub().resolves(callback)
});
然后你可以调用doThing
并分析结果。
测试完成后不要忘记通过
恢复原来的post
externalService.post.restore();