我有一个称为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