gpt4 book ai didi

javascript - 是否有等效的方法来设置模拟实现,而不是使用 jest 的 __mocks__ 目录方法?

转载 作者:行者123 更新时间:2023-12-02 21:54:22 24 4
gpt4 key购买 nike

我有一个名为 retry 的实用函数,它用一些重试逻辑包装传递的函数(下面的简化版本)。

在某些测试中,我只想调用传递的函数一次,而不是执行重试逻辑。

app/retry.js

module.exports = async function retry(funcProvider) {
let retriesLeft = 5;

while (retriesLeft > 0) {
try {
return await funcProvider();
} catch (error) {
// delay for a bit

retriesLeft--;
}
}
};

以及等效的__mocks__版本。

app/__mocks__/retry.js

module.exports = async function retry(funcProvider) {
return await funcProvider();
}

有没有一种方法可以完成与上面相同的操作,但不使用 __mocks__ 设置?我想使用类似于 jest.mock() 的工厂参数( https://jestjs.io/docs/en/jest-object#jestmockmodulename-factory-options )的方法在测试文件中内联执行此操作,但我无法找出正确的组合。想知道我是否遗漏了一些明显的东西,或者这是否是 Jest 的“限制”。请注意,我需要在实现中引用传递的参数。

最佳答案

尝试

jest.mock('app/retry.js', () => 
async (funcProvider) => { return await funcProvider(); }
);

此外,您还可以使用 __mocks__ 并根据需要修改模拟(因为它已经是同一个 Jest 的模拟对象):

import retryMock from 'app/retry';

....
it('....', () => {
retryMock.mockReturnValueOnce(Promise.reject());

关于javascript - 是否有等效的方法来设置模拟实现,而不是使用 jest 的 __mocks__ 目录方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60049011/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com