繁体   English   中英

如何测试 jest mock 模块

[英]How to test jest mock module

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

someModule.setKey('API_KEY');

我想测试setKey function。所以我写了下面的单元测试用例。

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

应该有什么好的方法来测试呢?

它应该工作。 这是一个例子:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM