我有一个以前创建的 .js
文件,它模拟了我们的一些函数,用于 jest
测试目的。我正在将其迁移到 .ts
文件:
服务器.ts
const Server = jest.genMockFromModule('../Server');
Server.getAsync = Server.default.getAsync;
// other REST-ful functions here
export default Server;
我收到以下错误:
类型“{}”上不存在属性“getAsync”
类型“{}”上不存在属性“默认”
然后,在相应的测试文件中:
我的组件.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()
上收到错误消息
预期有 1 个参数,但得到 0 个。(方法)jest.MockInstance<{}>.mockImplementationOnce(fn: (…args: any[]) => any): jest.Mock<{}>
…在 Server.getAsync.mockReturnValueOnce
类型“(url: string, baseRoute?: string | null, loadingGenerator?: (isLoading: boolean) => { type: strin…”上不存在属性“mockReturnValueOnce”。
…以及 Server.getAsync.mock
属性“mock”在类型“(url: string, baseRoute?: string | null, loadingGenerator?: (isLoading: boolean) => { type: strin…”上不存在。
我已经为此苦苦思索了一段时间,所以非常感谢任何帮助。
更新
好的,我将 as any
添加到我的 Server.ts
文件第一行的末尾,现在它看起来像:
const Server = jest.genMockFromModule('../Server') as any;
这摆脱了第一组错误。仍然面临我的 .test.ts
文件中的错误。
更新 2
我注意到,当我运行实际的笑话测试时,即使存在类型错误,它们也会全部通过。这些问题似乎与实际测试无关。
原文由 noblerare 发布,翻译遵循 CC BY-SA 4.0 许可协议
我自己解决了这个问题。我让它工作的方法是
Server.getAsync
的任何调用转换为特定的笑话模拟类型。或者
这摆脱了我的错误。