У меня есть модуль (пример был упрощен), называемый process-prom, который имеет единственную функцию, которая принимает Promise как входную и обрабатывает ее - она также вызывает другие функций с помощью модулей вне его следующим образом:Как проверить мой код async jasmine/nodejs/prom, используя Spies
//<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
};
Я пытаюсь модульного тестирования описанной выше функции, используя жасмин, ReWire и жасмин шпионов согласно следующим кодом
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');
});
});
Я ожидаю, что Spy this.fakeUser .setDetails следует вызвать, но я получаю сообщение от Jasmine «Ожидаемый шпион fake-user.setAll для вызова с ['user', 'name'], но он никогда не вызывался. " - проблема заключается в том, что обещание - это Async, но я включил проделанную функцию, как предлагали другие SO-вопросы, но это, похоже, не решает проблему для меня. В чем проблема с моим кодом? большинство других вопросов SO относятся к угловым, поэтому не помогают с моей проблемой.
Большое вам спасибо за ваш быстрый и полезный ответ. изменения, которые вы предложили, отлично поработали, и это решило мою проблему с тестированием. – Dev