javascript - 如何使用 jest 进入 setTimeout 函数

标签 javascript unit-testing jestjs

使用 Jest 和 Enzyme,如何运行 setTimeout() 内的代码?我还希望延迟时间被视为 0,这样就不会延迟我的测试

正在测试的功能:

   functionToBeTested = () => {
           //more code...
            setTimeout(() => {
              console.log('not logging :/')
              return 'anything';
            }, 1000);
    }

测试:

it('functionToBeTested', () => { 
    expect(functionToBeTested).toEqual('anything');
}) 

最佳答案

这是单元测试解决方案:

index.ts:

export const functionToBeTested = () => {
  return new Promise(resolve => {
    setTimeout(() => {
      console.log('not logging :/');
      resolve('anything');
    }, 1000);
  });
};

index.spec.ts:

import { functionToBeTested } from './';

jest.useFakeTimers();

test('should return correctly', async () => {
  const logSpy = jest.spyOn(console, 'log');
  const promise = functionToBeTested();
  jest.runAllTimers();
  await expect(promise).resolves.toBe('anything');
  expect(logSpy).toBeCalledWith('not logging :/');
});

100%覆盖率的单元测试结果:

 PASS  src/stackoverflow/56942805/index.spec.ts (8.036s)
  ✓ should return correctly (10ms)

  console.log node_modules/jest-mock/build/index.js:860
    not logging :/

----------|----------|----------|----------|----------|-------------------|
File      |  % Stmts | % Branch |  % Funcs |  % Lines | Uncovered Line #s |
----------|----------|----------|----------|----------|-------------------|
All files |      100 |      100 |      100 |      100 |                   |
 index.ts |      100 |      100 |      100 |      100 |                   |
----------|----------|----------|----------|----------|-------------------|
Test Suites: 1 passed, 1 total
Tests:       1 passed, 1 total
Snapshots:   0 total
Time:        9.608s

源代码:https://github.com/mrdulin/jest-codelab/tree/master/src/stackoverflow/56942805

关于javascript - 如何使用 jest 进入 setTimeout 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56942805/

相关文章:

angular - 使用 Jasmine 在 Angular 8 中测试异步代码时如何等待?

database - phpunit 中有没有办法将数据库扩展与 selenium 扩展一起使用?

javascript - 你能用 Jest 只模拟外部模块的一部分吗?

reactjs - 我怎样才能让 Jest 静静地测试抛出的错误

javascript - 为什么属性用 null 初始化的对象数组处理得更好

javascript - 如何在 JS 中根据格式字符串验证日期

javascript - Image SRC 没有改变什么?

python - 在 Python 中对整个应用程序进行回归测试

javascript - 来自 npm 脚本的开 Jest 正则表达式

javascript - 具有变量和多个值的 jQuery .css() 函数