Как издеваться надReturnValue с задержкой в шутливом тестировании?
Цель этого теста состоит в том, чтобы имитировать метод как неустановленный на flushpromise. Скажем,
Есть два возможных способа, мы можем добиться этого с помощью
Ожидается, что оба вышеупомянутых варианта дадут неурегулированное обещание при утверждении.
Хотя второй вариант, похоже, не работает со следующим кодом. Любой вклад приветствуется.
Пробовал следующий код.
`
import callout from ".../callout.."
jest.mock(
"../callout..",
()=>{
return{
default:jest.fn(),
};
},
{virtual: true}
);
const { setImmediate } = require("timers");
function flushPromises()
{
return new Promise((resolve)=> setImmediate(resolve));
}
`it("test delay", async()=>{
jest.useFakeTimers();
callout.mockResolvedValue(()=> Promise(resolve=>setTimeout(()=>resolve(),2000)));
jest.advanceTimersByTime(20);
await flushpromises();
expect(callout).not.toHavebeencalled();
jest.advanceTimersByTime(2000);
expect(callout).toHavebeencalled();
});
`
Отредактировал вопрос. Извини за это. Надеюсь, теперь вопрос ясен.





Я могу решить проблему со следующим изменением. По сути, я заменил setTimeout пользовательской функцией wait, как показано ниже.
import callout from ".../callout.."
jest.mock( "../callout..",()=>{
return{
default:jest.fn(),
};
},
{virtual: true}
);
const { setImmediate } = require("timers");
function flushPromises()
{
return new Promise((resolve)=> setImmediate(resolve));
}
it("test delay", async()=>{
jest.useFakeTimers();
let response= {statusCode : 200,
JSON.stringify({status:200,data:true})};
callout.mockReturnValueOnce(wait(2000,respone);
jest.advanceTimersByTime(20);
await flushpromises();
expect(callout).not.toHavebeencalled();
jest.advanceTimersByTime(2000);
expect(callout).toHavebeencalled();
});
function wait(ms,value)
{
return new Promise(resolve => setTimeout(resolve,ms,value));
}
Пожалуйста, уточните вашу конкретную проблему или предоставьте дополнительную информацию, чтобы выделить именно то, что вам нужно. Как сейчас написано, трудно точно сказать, о чем вы спрашиваете.