开玩笑窥探外部功能问题

时间:2019-04-15 10:22:15

标签: reactjs jestjs

出于某些原因,我收到此错误:

Cannot spy the handleError property because it is not a function; undefined given instead

我正在使用间谍方法...

const spyHandleError = jest.spyOn(handleError, 'handleError');

...检查是否调用了handleError函数:

expect(spyHandleError).toHaveBeenCalled();

我的handleError函数看起来像这样:

import { reduxAction } from '../store/actions/auth';

export const handleError = (status, dispatch) => {
  if(status === 403) {
    return dispatch(reduxAction());
  }
};

为什么会出现此错误,如何使用spyOn方法进行测试?

1 个答案:

答案 0 :(得分:2)

调用 jest.spyOn 方法时,必须首先提供包含要监视的方法的对象(documentation)。

您可能正在导入 handleError 方法,例如:

import { handleError } from 'file-where-handle-error-is';

因此,导入的 handleError 直接是函数,而不是包含该函数的对象。

要解决您的问题,您可以导入 handleError 所在的模块,然后模拟 handleError 方法:

const utils = require('file-where-handle-error-is');
const spyHandleError = jest.spyOn(utils, 'handleError');

另一种解决方案是使用jest.mock模拟 handleError 所在的模块:

jest.mock('../../../src/utils/handle-error', () => {
return {
    handleError: jest.fn()
};