我有一個稱爲process-promise的模塊(示例已被簡化),它具有將Promise作爲輸入並處理它的單個函數 - 它還調用其他使用模塊外面如下功能:我如何使用Spies測試我的異步jasmine/nodejs/promise代碼
//<process-promise.js>
let User = require('user-module');
let processPromise = (promiseObj) => {
let user = new User();
promiseObj.then((full_name) => {
const [ fname, sname ] = full_name.split(' ');
if (fname && sname) {
user.setDetails(fname, sname);
} else{
console.log('nothing happened');
}
}).catch((err) => {
console.log(err.message);
});
};
module.exports = {
processPromise
};
我試圖單元測試使用茉莉,重新佈線和茉莉間諜上述函數按照以下代碼
let rewire = require('rewire');
let mod = rewire('process-promise');
describe('process-promise module',() => {
beforeEach(() => {
this.fakeUser = createSpyObj('fake-user', ['setDetails']);
this.fakeUserMod = jasmine.createSpy('fake-user-mod');
this.fakeUserMod.and.returnValue(this.fakeUser)
this.revert = mod.__set__({
User: this.fakeUserMod
});
});
afterEach(() => {
this.revert();
});
it('fakeUser.setDetails should be called', (done) => {
mod.processPromise(Promise.resolve('user name'));
done();
expect(this.fakeUser.setDetails).toHaveBeenCalledWith('user','name');
});
});
我期望間諜this.fakeUser .setDetails應該被調用,但我從茉莉花「預期的間諜fake-user.setAll已被['user','name']調用,但從未被調用過。「 - 問題似乎是承諾是異步的事實,但我已經包含完成功能,因爲其他SO問題已經提出,但這似乎並沒有解決我的問題。我的代碼有什麼問題?大多數其他SO問題與角度有關,所以不能幫助解決我的問題。
非常感謝您的快速和有益的迴應。您建議的更改工作得很好,這已解決了我的測試問題。 – Dev