我有一个以前创建的.js文件,该文件嘲笑了一些用于jest测试目的的功能。我正在将其迁移到.ts文件中:
.js
jest
.ts
服务器
const Server = jest.genMockFromModule('../Server'); Server.getAsync = Server.default.getAsync; // other REST-ful functions here export default Server;
我收到以下错误:
类型“ {}”上不存在属性“ getAsync” 类型“ {}”上不存在属性“默认”
类型“ {}”上不存在属性“ getAsync”
类型“ {}”上不存在属性“默认”
然后,在相应的测试文件中:
MyComponent.test.ts
import Server from 'path/to/Server'; jest.mock('path/to/Server'); const dispatchMock = jest.fn(); const getStateMock = jest.fn(); describe('MyComponent.someFunction', () => { beforeEach(() => { jest.resetAllMocks(); }); it('Does the right stuff', () => { Server.getAsync.mockReturnValueOnce(Promise.resolve([{ key: 'value' }])); dispatchMock.mockImplementationOnce((promise) => promise); dispatchMock.mockImplementationOnce(); return someFunction()(dispatchMock) .then(() => { expect(Server.getAsync).toHaveBeenCalledTimes(1); expect(Server.getAsync.mock.calls[0][0]).toBe('something'); }); }); });
我在遇到错误 dispatchMock.mockImplementationOnce()
dispatchMock.mockImplementationOnce()
预期为1个参数,但为0。(方法)jest.MockInstance <{}>。mockImplementationOnce(fn:(… args:any [])=> any):jest.Mock <{}>
…上 Server.getAsync.mockReturnValueOnce
Server.getAsync.mockReturnValueOnce
属性’mockReturnValueOnce’在类型’(url:string,baseRoute ?: string | null,loadingGenerator ?:(isLoading:boolean)=> {type:strin …’)中不存在。
…等等 Server.getAsync.mock
Server.getAsync.mock
属性’mock’在类型’(url,string,baseRoute ?: string | null,loadingGenerator ?:(isLoading:boolean)=> {type:strin …’)中不存在。
我已经为此努力了一段时间,因此任何帮助将不胜感激。
更新
好的,我添加as any了Server.ts文件第一行的末尾,现在看起来像:
as any
Server.ts
const Server = jest.genMockFromModule('../Server') as any;
那摆脱了第一组错误。.test.ts虽然仍然面对我文件中的错误。
.test.ts
更新2
我注意到,当我运行实际的笑话测试时,即使存在TypeError,它们也都通过了。这些问题似乎与实际测试无关。
我自己修好了。我使用它的方法是将所有调用投射Server.getAsync到特定的笑话模拟类型。
Server.getAsync
let getAsyncMock = Server.getAsync as jest.Mock
要么
let getAsyncMock = <jest.Mock>(Server.getAsync)
这摆脱了我的错误。