所以我使用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' };
}
当我运行jest测试时,它抛出:
TypeError: (0 , _http.defaultHeaders) is not a function
奇怪的是, Package 在默认函数或常量中的所有其他测试都可以工作。
有没有办法用Jest测试非默认导出的函数?
更新:
- 我也试过把defaultHeaders转换成箭头函数,但没有用。
- 并尝试将导入更改为:
import * as http from './http'
仍然会抛出相同的错误
2条答案
按热度按时间mbzjlibv1#
更新答案
所以问题是,在
src/setupTest.ts
中,我包含了一个模块的mock,而没有我试图测试的函数,因此它是未定义的。如果我从setupTest.ts中删除mocked,那么我就可以对它进行单元测试了。
c0vxltue2#
在我的例子中,问题出在路径上。我正在测试一个名为“index.js”的文件,我想当然地认为在导入函数时不需要将它包含在路径中。我错了。
错误代码:
正确代码: