【问题标题】:Jest - how to test outcome of promise开玩笑 - 如何测试承诺的结果
【发布时间】: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


【解决方案1】:

用这个解决了:

it.only('pushes the given url to history after initializing cordova', (done) => {
  rewireUtility.__Rewire__('history', { push: (route) => {
        expect(route).toEqual('/sports');
        done();
  } });
  functionToTest('test://sports');
});

【讨论】:

    猜你喜欢
    • 2018-12-10
    • 2021-01-10
    • 2019-07-21
    • 2022-06-10
    • 2018-11-19
    • 2022-06-29
    • 2022-01-13
    • 1970-01-01
    • 2018-08-30
    相关资源
    最近更新 更多