【问题标题】:react jest.mock doesn't mock files and fails all test using itreact jest.mock 不会模拟文件并且使用它的所有测试都失败了
【发布时间】:2017-12-02 10:05:52
【问题描述】:

我在使用 Jest 进行测试时遇到问题。我用create-react-app 做了一个反应应用程序并做了一些测试。现在,我所有使用模拟数据的测试都失败了。似乎jest.mock('../../../main/services/api'); 没有模拟任何东西,正如您在下面的错误中看到的那样

TypeError: _ScheduleAPI2.default.addAvailability is not a function

      at src/schedule/actions/scheduleActions.js:173:7183
      at Object.dispatch (node_modules/redux-thunk/lib/index.js:11:18)
      at Object.it (src/schedule/actions/__tests__/scheduleActions-test.js:361:18)
      at runMicrotasksCallback (internal/process/next_tick.js:64:5)
      at _combinedTickCallback (internal/process/next_tick.js:73:7)
      at process._tickCallback (internal/process/next_tick.js:104:9) 

测试示例:

import ScheduleAPI from '../../services/ScheduleAPI';

jest.mock('../../services/ScheduleAPI');


.
.
.


  it('creates LOAD_MORE_APPROVED_APPOINTMENTS_FAILURE when loading more approved appointments fails', () => {
    ScheduleAPI.fetchApprovedAppointments.mockImplementation(() => {
      throw { status: 401, error: { error: 'unauthorized' } };
    });

    return store.dispatch(actions.loadMoreApprovedAppointments(A_DATE))
                .catch(() => {
                  expect(store.getActions()).toEqual([
                    { type: LOAD_MORE_APPROVED_APPOINTMENTS_REQUEST },
                    { type: LOAD_MORE_APPROVED_APPOINTMENTS_FAILURE },
                  ]);
                });
  });

最奇怪的是,这个测试通过了项目 CI 和同事。有谁知道为什么?

【问题讨论】:

    标签: reactjs jestjs create-react-app


    【解决方案1】:

    您需要显式地throw new Error() 出现错误,否则无论您throw 将转到.then() 而不是.catch()throw new Error('unauthorized') 的参数也是一个字符串,用于描述错误,您不能发送状态或响应对象。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-05
      • 2021-10-21
      • 2015-07-27
      • 1970-01-01
      • 2020-01-13
      • 2020-09-13
      相关资源
      最近更新 更多