如何解决Jest抛出TypeError:0,_module.myFunction不是一个函数,使用Jest测试导出的函数非默认值
所以我正在使用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'
,但仍然会引发相同的错误
解决方法
您没有正确导入defaultHeaders。您可以在这里做两件事:-
- 将导入行从'./http/http'更改为 import {defaultHeaders};
- 或者,如果您希望此确切的代码块正常工作,则需要将http.ts重命名为index.ts, 那么它可以直接从目录http中引用defaultHeaders。
默认情况下,导入语句引用目录中存在的索引文件。
,使用答案更新
所以问题是,在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: {},request: function () {
return {
json: {},}));
如果我从setupTest.ts中删除了模拟文件,则可以对其进行单元测试。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。