【发布时间】:2017-02-22 21:38:22
【问题描述】:
我有一个名为 process-promise 的模块(示例已简化),它有一个函数,该函数将 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
};
我正在尝试按照以下代码使用 Jasmine、Rewire 和 Jasmine 间谍对上述功能进行单元测试
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 应该被调用,但我从 Jasmine 收到消息“预期间谍 fake-user.setAll 已使用 ['user','name'] 调用,但从未调用。” - 问题似乎是承诺是异步的,但我已经包含了 done 功能,正如其他 SO 问题所建议的那样,但这似乎并不能解决我的问题。我的代码有什么问题?大多数其他 SO 问题都与角度有关,所以对我的问题没有帮助。
【问题讨论】:
标签: javascript node.js asynchronous jasmine