如何使用玩笑模拟计时器?

时间:2019-02-15 08:51:56

标签: javascript node.js jestjs

如何使用Jest模拟计时器context.getRemaining()并模拟sendMessage()计时器?

我希望在调用context.getRemaining()时将sendMessage()减少9秒。 sendMessage()将通过while循环多次调用。它将以60,000ms开始。

exports.handler = async (context) => {
 while (true) {
    console.log(context.getRemaining());
    await sendMessage();
    if (context.getRemaining() < 13000) {
      break;
    }
 }

 return "FINISH";
}

1 个答案:

答案 0 :(得分:1)

您可以将jest.fn()用于context.getRemaining,并为其提供多种功能:

sendMessage = jest.fn(async () => {});
await handler({
    getRemaining: jest.fn()
        .mockReturnValueOnce(20000)
        .mockReturnValueOnce(10000),
});
expect(sendMessage).toHaveBeenCalledTimes(2)

编写测试时,通常最好避免在测试代码中使用复杂的逻辑。对于模拟,您可以提供显式的返回值。否则,您需要为测试代码编写测试,这很糟糕。