Jest抛出TypeError:(0,_module.myFunction)不是一个函数,使用Jest测试导出的函数(非默认值)

时间:2020-09-11 20:18:45

标签: typescript jestjs create-react-app

所以我正在使用Jest,Typescript和Create-react-app

我有这个测试:

import { defaultHeaders } from './http';

describe('http tests', () => {
  test('defaultHeaders()', () => {
    const headers = defaultHeaders(undefined);
    expect(headers).toEqual({ foo: 2 });
  });
});

代码位于文件http.ts中的相同子目录中,如下所示:

export function defaultHeaders(headers?: FetchHeaders): FetchHeaders {
  return { 'Content-Type': 'application/json' };
}

当我进行笑话测试时,它会抛出:

TypeError: (0 , _http.defaultHeaders) is not a function

奇怪的是,包装在默认函数或const中的所有其他测试都可以正常工作。

是否可以用Jest测试非默认导出的功能?

更新:

  • 还尝试将defaultHeaders转换为箭头函数,但没有帮助。
  • 并尝试将导入更改为:import * as http from './http',但仍然会引发相同的错误

2 个答案:

答案 0 :(得分:0)

您没有正确导入defaultHeaders。您可以在这里做两件事:-

  1. 将导入行从'./http/http'更改为 import {defaultHeaders};
  2. 或者,如果您希望此确切的代码块正常工作,则需要将http.ts重命名为index.ts, 那么它可以直接从目录http中引用defaultHeaders。

默认情况下,导入语句引用目录中存在的索引文件。

答案 1 :(得分:0)

使用答案更新

所以问题是,在src/setupTest.ts中,我包含了该模块的模拟,但没有试图测试的功能,因此未定义。

// mock our fetch wrapper to avoid doing http calls in tests
jest.mock('utilities/http/http', () => ({
  // NO defaultHeaders() function mocked that was the problem 
  getRequest: function () {
    return {
      json: {},
      status: 200,
    };
  },
  postRequest: function () {
    return {
      json: {},
      status: 200,
    };
  },
  request: function () {
    return {
      json: {},
      status: 200,
    };
  },
}));

如果我从setupTest.ts中删除了模拟文件,则可以对其进行单元测试。