小编典典

使用笑话模拟时出现打字稿错误

reactjs

我有一个以前创建的.js文件,该文件嘲笑了一些用于jest测试目的的功能。我正在将其迁移到.ts文件中:

服务器

const Server = jest.genMockFromModule('../Server');

Server.getAsync = Server.default.getAsync;
// other REST-ful functions here

export default Server;

我收到以下错误:

类型“ {}”上不存在属性“ 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()

预期为1个参数,但为0。(方法)jest.MockInstance <{}>。mockImplementationOnce(fn:(…
args:any [])=> any):jest.Mock <{}>

…上 Server.getAsync.mockReturnValueOnce

属性’mockReturnValueOnce’在类型’(url:string,baseRoute ?: string |
null,loadingGenerator ?:(isLoading:boolean)=> {type:strin …’)中不存在。

…等等 Server.getAsync.mock

属性’mock’在类型’(url,string,baseRoute ?: string | null,loadingGenerator
?:(isLoading:boolean)=> {type:strin …’)中不存在。

我已经为此努力了一段时间,因此任何帮助将不胜感激。

更新

好的,我添加as anyServer.ts文件第一行的末尾,现在看起来像:

const Server = jest.genMockFromModule('../Server') as any;

那摆脱了第一组错误。.test.ts虽然仍然面对我文件中的错误。

更新2

我注意到,当我运行实际的笑话测试时,即使存在TypeError,它们也都通过了。这些问题似乎与实际测试无关。


阅读 225

收藏
2020-07-22

共1个答案

小编典典

我自己修好了。我使用它的方法是将所有调用投射Server.getAsync到特定的笑话模拟类型。

let getAsyncMock = Server.getAsync as jest.Mock

要么

let getAsyncMock = <jest.Mock>(Server.getAsync)

这摆脱了我的错误。

2020-07-22