如何用笑话获得模拟实用程序功能

时间:2019-12-06 07:05:25

标签: reactjs jestjs

我有react模块,它从实用程序中调用函数。我正在测试组件和模拟实用程序功能,但不知何故没有得到它的线路介绍。我嘲笑了实用程序功能以使测试出错,但是它仍然通过了,这使我感到疑惑。

关于如何模拟实用程序功能的任何提示或指南?

//Utils.js
export const add = () => {
    return x;
}

add功能在App模块中使用。我想测试App,但模拟无法返回我期望的返回值。

//Mocking as below
jest.mock('../utils', () => ({
    ...jest.requireActual('../utils'),
    add:() => 4
}));

1 个答案:

答案 0 :(得分:0)

您可以使用jest.spyOnutils.add方法创建存根。

例如

App.js

import * as utils from './Utils';

export function bootstrap() {
  return utils.add();
}

Utils.js

export const add = () => {
  const x = 1;
  return x;
};

App.test.js

import { bootstrap } from './App';
import * as utils from './Utils';

describe('bootstrap', () => {
  it('should mock utils.add method correctly', () => {
    const addStub = jest.spyOn(utils, 'add').mockReturnValueOnce(2);
    const actual = bootstrap();
    expect(actual).toBe(2);
    expect(addStub).toBeCalledTimes(1);
    addStub.mockRestore();
  });

  it('should pass', () => {
    expect(utils.add()).toBe(1);
  });
});

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

 PASS  src/stackoverflow/59208419/App.test.js (7.993s)
  bootstrap
    ✓ should mock utils.add method correctly (5ms)
    ✓ should pass (1ms)

----------|----------|----------|----------|----------|-------------------|
File      |  % Stmts | % Branch |  % Funcs |  % Lines | Uncovered Line #s |
----------|----------|----------|----------|----------|-------------------|
All files |      100 |      100 |      100 |      100 |                   |
 App.js   |      100 |      100 |      100 |      100 |                   |
 Utils.js |      100 |      100 |      100 |      100 |                   |
----------|----------|----------|----------|----------|-------------------|
Test Suites: 1 passed, 1 total
Tests:       2 passed, 2 total
Snapshots:   0 total
Time:        9.072s

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