将常见的笑话模拟提取到util文件中

问题描述 投票:0回答:1

我已经浏览了有关手动模拟的官方 Jest 文档,但我不太明白它的意义。

我有一个导出计算值对象的文件

utils.js

export const getCalculatedValues = (stuff) => ({
   val1: 'val1',
   val2: 'val2',
   ...
});

然后我在我尝试测试的其他几个文件中使用它 - 例如:

usage.js

import {getCalculatedValues} from './utils';

export const doSomething = () => getCalculatedValues('some-val');

到目前为止,我已经成功地嘲笑了原来的

getCalculatedValues

usage.test.js

jest.mock('./utils', () => ({
  __esModule: true,
  getCalculatedValues: {
    val1: 123,
    val2: 321,
    ...
  }
}));


// Assume this passes ;-)
it('Should return mock values', () => {
    const res = doSomething();
    expect(res.val1).toEqual(123);
});

如前所述,我在几个不同的文件中使用

getCalculatedValues
,这意味着我需要在每个测试文件中执行它的
jest.mock
,这是大量重复。

我正在尝试了解 Jest 的“手动嘲笑”方面,但我似乎不明白我应该做什么......

我知道我应该在

__mocks__
目录中创建一个文件,但从那里开始,我不完全确定该文件中应该包含什么...

javascript unit-testing jestjs mocking
1个回答
0
投票

我觉得我的困惑来自于关于这个问题的官方 Jest 文档,因为他们展示了同时对依赖项和文件执行手动模拟。

我从我看到的 Youtube 教程中获得了一些灵感,该教程显示仅对文件执行手动模拟。

因此,正如文档所说,您必须在同一目录级别但在其自己的

__mocks__
目录中为您尝试模拟的事物创建一个模拟。

所以对我来说,假设我们有一个像这样的文件结构

.
└── src/
    ├── utils/
    │   └── utils.js
    └── other-files/
        ├── usage.js
        └── usage.test.js

假设我们想要模拟

/src/utils/utils.js
中的功能而不是
/other-files/usage
中的功能,我们应该在
__mocks__
 中创建 
__mocks__/utils.js
 目录和 
/src/utils

.
└── src/
    ├── utils/
    │   ├── __mocks__/
    │   │   └── utils.js
    │   └── utils.js
    └── other-files/
        ├── usage.js
        └── usage.test.js

/__mocks__/utils.js
的内容应该反映您正在模拟的原始文件的内容。至少,您想要模拟的部分并返回您正在寻找的模拟值。

模拟/utils.js

export const getCalculatedValues = (stuff) => ({
   val1: 'mocked-val1',
   val2: 'mocked-val2',
   ...
});

然后,我们只需在

/other-files/usage.test.js
文件中模拟它

jest.mock('../utils/utils');

// Assume this passes ;-)
it('Should return mock values', () => {
    const res = doSomething();
    expect(res.val1).toEqual(123);
});

应该就是这样!

一个好的检查是对您想要检查的值进行

console.log

© www.soinside.com 2019 - 2024. All rights reserved.