您可以使用类型转换,您应该如下所示:test.ts
import * as dep from '../dependency';
jest.mock('../dependency');
const mockedDependency = <jest.Mock<typeof dep.default>>dep.default;
it('should do what I need', () => {
//this throws ts error
// Property mockReturnValueOnce does not exist on type (name: string)....
mockedDependency.mockReturnValueOnce('return');
});
TS转译器不知道更改类型,因此您必须使用类型转换。由于导入不是类型定义,因此您必须使用 获取其类型。jest.mock('../dependency');
dep
dep
typeof dep.default
以下是我在使用Jest和TS期间发现的其他一些有用的模式
当导入的元素是一个类时,您不必使用typeof,例如:
import { SomeClass } from './SomeClass';
jest.mock('./SomeClass');
const mockedClass = <jest.Mock<SomeClass>>SomeClass;
当您必须模拟某些节点本机模块时,此解决方案也很有用:
import { existsSync } from 'fs';
jest.mock('fs');
const mockedExistsSync = <jest.Mock<typeof existsSync>>existsSync;
如果您不想使用jest自动模拟,并且更喜欢创建手动模拟
import TestedClass from './TestedClass';
import TestedClassDependency from './TestedClassDependency';
const testedClassDependencyMock = jest.fn<TestedClassDependency>(() => ({
// implementation
}));
it('Should throw an error when calling playSomethingCool', () => {
const testedClass = new TestedClass(testedClassDependencyMock());
});
testedClassDependencyMock()
创建模拟对象实例可以是类或类型或接口TestedClassDependency