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();
});
}
}
所以存根在回調之外,但不在裏面。但是,我被告知,更新原始代碼以獲得工作單元測試是一種不好的做法。
您是否知道一個解決方案,並不意味着要更改原始代碼?