Javascript 如何解决Jest模拟中的流类型错误

Javascript 如何解决Jest模拟中的流类型错误,javascript,jestjs,flowtype,Javascript,Jestjs,Flowtype,我使用Jest模拟模块中的某些函数,并以以下方式进行测试: jest.mock(“模块”,()=>({ funcOne:jest.fn(), funcTwo:jest.fn(), ... })); 从“模块”导入{funcOne,funcTwo,…}; test(“funcOne返回'foo'”时的内容,()=>{ funcOne.mockImplementation(()=>'foo');//{ funcOne.mockImplementation(()=>'bar');//谢谢,Andrew

我使用Jest模拟模块中的某些函数,并以以下方式进行测试:

jest.mock(“模块”,()=>({
funcOne:jest.fn(),
funcTwo:jest.fn(),
...
}));
从“模块”导入{funcOne,funcTwo,…};
test(“funcOne返回'foo'”时的内容,()=>{
funcOne.mockImplementation(()=>'foo');//{

funcOne.mockImplementation(()=>'bar');//谢谢,Andrew Haines,您发布的评论提供了一个解决方案。我对以下内容感到满意:

constmock=(mockFn:any)=>mockFn;
test(“funcOne返回'foo'”时的内容,()=>{
mock(funcOne).mockImplementation(()=>'foo');//mo更多流错误!
...
});

您也可以内联松开类型约束:

test("something when funcOne returns 'foo'", () => {
    (funcOne: any).mockImplementation(() => 'foo');  // mo more flow errors!
    ...
});

我建议使用
JestMockFn
类型,而不是使用
any
来抑制错误。下面是一个相关问题:

示例(从上面的链接复制):

从“../../js/comm/ajax”导入ajax;
jest.mock('../../js/comm/ajax',()=>{
返回{
默认值:jest.fn(),
}
});
const mockAjax:JestMockFn=ajax;
描述('ConfigurationProvider',()=>{
它('调用fetchConfig()应该返回一个承诺',()=>{
const expectedCfg={x:'y'};
mockAjax.mockReturnValueOnce(
Promise.resolve({body:expectedCfg})
);
...
});
});
以下是最新jest版本中定义类型的方式:


请注意,该类型是全局的,不必导入(在我看来这是一个不幸的决定,但这是另一个主题)。

相关问题:这对我很有效,但我必须执行
const mockCookieManageTarget:JestMockFn=(CookieManager.get:any)
。我真的不明白为什么;它说
CookieManager.get
是一个不精确的函数类型,因此与确切的
JestMockFn
类型不匹配。不过调用它时最好有这个类型的信息。