【发布时间】:2019-03-13 10:05:32
【问题描述】:
使用 Jest 如何在单元测试函数中的 promise 被解析时测试执行的步骤?
例子:
// FUNCTION TO TEST
export function functionToTest(url) {
initSomething().then(() => {
console.log('YEP, CALLED');
storeHistory.push(url);
});
}
// UNIT TEST
import { functionToTest, __RewireAPI__ as rewireUtility } from './funcToTest';
describe('functionToTest', () => {
let pushSpy;
beforeEach(() => {
pushSpy = jest.fn();
rewireUtility.__set__('storeHistory', { push: pushSpy });
rewireUtility.__set__('initSomething', () => Promise.resolve());
});
it('pushes the given url to history after initializing cordova', () => {
functionToTest('/sports');
expect(pushSpy).toHaveBeenCalledTimes(1);
expect(pushSpy).toHaveBeenCalledWith('/sports');
});
});
在这种情况下 pushSpy 被调用 0 次(即使日志被打印出来)。如何正确测试?
【问题讨论】:
-
一方面,你的
functionToTest没有返回承诺,所以await没有什么可以等待的,所以它不会。 -
好点,我正在尝试那条路线。删除它的结果相同。
-
抱歉,删除什么? 〜删除〜不,我的坏
-
我倾向于自己删除重新布线的使用。你应该可以
jest.mockinitSomething,但这不太可能解决任何问题。 -
如果我使用以下它超时..
global.history = { push: (route) => { expect(route).ToEqual('/sports'); done(); }};(但调用了console.log..)
标签: javascript reactjs unit-testing jestjs es6-promise