【发布时间】:2018-07-23 08:44:46
【问题描述】:
当测试在不同文件中具有依赖关系的模块并将该模块分配为 jest.mock 时,TypeScript 会给出一个错误,即方法 mockReturnThisOnce(或任何其他 jest.mock 方法)在依赖,这是因为它是以前键入的。
让 TypeScript 从 jest.mock 继承类型的正确方法是什么?
这是一个简单的例子。
依赖
const myDep = (name: string) => name;
export default myDep;
test.ts
import * as dep from '../depenendency';
jest.mock('../dependency');
it('should do what I need', () => {
//this throws ts error
// Property mockReturnValueOnce does not exist on type (name: string)....
dep.default.mockReturnValueOnce('return')
}
我觉得这是一个非常常见的用例,不知道如何正确输入。
【问题讨论】:
-
如果我没记错的话,你必须在导入之前模拟。只需切换前 2 行。但我不确定这一点。
-
@ThomasKleßen 通过 ES6
import导入的模块首先被评估,无论您是否在导入之前添加了一些代码。所以这行不通。 -
@Thomas 对 jest.mock 的调用被提升到代码的顶部 - 我猜是开玩笑的魔法......(ref)但是,这会产生一些陷阱,例如当calling jest.mock() with the module factory parameter 因此将模拟函数命名为
mock...
标签: javascript unit-testing typescript jestjs