2
我有以下的Javascript代码:如何用Sinon.JS模拟一个回调中的模块函数?
import Notifications from 'notification-system';
export class DocumentParameters {
handleUpload() {
return Promise.resolve().then(() => {
Notifications.success();
});
}
}
notification-system
一些模块,我NPM安装。
我想在这个单元测试嘲笑Notifications.success
:
import Notifications from 'notification-system';
import { expect } from 'chai';
import sinon from 'sinon';
import { DocumentParameters } from './document';
describe('handleUpload()',() => {
it('should upload and create a success notification', (done) => {
const success = sinon.stub(Notifications, 'success');
const documentParameters = new DocumentParameters();
documentParameters.handleUpload().then(() => {
expect(success.callCount).to.equal(1);
done();
});
success.restore();
});
});
这个单元测试失败,因为存根从来没有所谓:success.callCount
为0
我的解决办法:
import Notifications from 'notification-system';
export class DocumentParameters {
handleUpload() {
const success = Notifications.success;
return Promise.resolve().then(() => {
success();
});
}
}
所以存根在回调之外,但不在里面。但是,我被告知,更新原始代码以获得工作单元测试是一种不好的做法。
您是否知道一个解决方案,并不意味着要更改原始代码?