如何测试笑话模拟模块

时间:2020-02-12 15:58:09

标签: javascript node.js reactjs unit-testing jestjs

// utils.js
var someModule = require('someModule');

someModule.setKey('API_KEY');

我想测试setKey功能。所以我在下面写了单元测试用例。

jest.mock('someModule, () => {
   return {
     setKey: jest.fn()
   }
})

describe('utils', () => {
   afterEach(()=> {
      jest.clearAllMocks()
   })

   it(`test case 1`, () => {})

   it(`test case utils`, () => {
       expect(someModule.setKey.mocks.calls).toHaveLength(1)
   })
});

最后一个测试用例失败,但是如果我将最后一个测试用例作为第一个测试用例,那么它将起作用。由于没有执行clearAllMocks函数。

什么是测试它的好方法?

1 个答案:

答案 0 :(得分:0)

应该可以。这是一个示例:

utils.js

const someModule = require('someModule');

function main() {
  someModule.setKey('API_KEY');
}

module.exports = main;

由于someModule不是真正的模块,因此我使用{virtual: true}选项。

utils.test.js

const main = require('./utils');
const someModule = require('someModule');

jest.mock(
  'someModule',
  () => {
    return { setKey: jest.fn() };
  },
  { virtual: true },
);

describe('60192332', () => {
  afterEach(() => {
    jest.clearAllMocks();
  });
  it('should set key', () => {
    main();
    expect(someModule.setKey.mock.calls).toHaveLength(1);
  });
});

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

 PASS  stackoverflow/60192332/utils.test.js (6.732s)
  60192332
    ✓ should set key (5ms)

----------|---------|----------|---------|---------|-------------------
File      | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s 
----------|---------|----------|---------|---------|-------------------
All files |     100 |      100 |     100 |     100 |                   
 utils.js |     100 |      100 |     100 |     100 |                   
----------|---------|----------|---------|---------|-------------------
Test Suites: 1 passed, 1 total
Tests:       1 passed, 1 total
Snapshots:   0 total
Time:        8.38s, estimated 13s