Jest测试运行器中手动模拟的命名约定

Naming conventions for manual mocks in Jest test runner

本文关键字:模拟 命名约定 测试运行 Jest      更新时间:2023-09-26

这是我的项目文件夹结构,

<<p> 文件夹结构/strong>
app
  - api
    - api1
      __mocks__
          index.js
      - index.js
    - api2
      __mocks__
          index.js
      - index.js
  - components
    -component1
       - index.js
       __tests__
           component1.test.js

现在我有component1内部使用api1做一些请求。对于当前的文件夹结构和模拟api模块,我面临两个问题。

  1. 我应该如何命名api/__mocks__下的文件?它应该是index.js(与api1下的index.js相同)还是应该是api1.mocks.js ?对于玩笑,是否需要一个命名约定?
  2. 目前的结构jest是扔给我以下错误,

Jest错误:

jest- speed -map:复制手动模拟发现:模块名称:index

是否有一个关于命名mock的文档?

这是我在package.json中的jest配置,

package.json:

"jest": {
    "testEnvironment": "jsdom",
    "testPathDirs": [
      "<app-path>"
    ],
    "modulePaths": [
      "<app-path>"
    ],
    "enableAutomock": true,
    "moduleNameMapper": {
      "^components": "<rootDir>/components",
      "^services": "<rootDir>/services",
      "^api": "<rootDir>/api",
      "^.+''.less$": "<rootDir>/__mocks__/styleMocks.js"
    }
  }
简单单元测试:
import React from 'react';
import {mount} from 'enzyme';
import Component from 'components/Component1';
jest.mock('api/api1');
describe('Component1 Unit tests', () => {
  it('Should render', () => {
    const c1 = mount(
      <Component1 />
     );
     expect(...);
  });
});

'是否有关于命名mock的文档?'

是的,文档指定在Manual mocks部分:

手动模拟是通过在紧邻模块的__mocks__/子目录中写入模块来定义的。例如,要在models目录中模拟一个名为user的模块,请创建一个名为user.js的文件并将其放在models/__mocks__目录中。

mock的名称应该与模块的名称相同。


'找到重复的手动模拟'

当使用moduleNameMapper时,文档读取:

映射到别名的模块默认是不模拟的。

我不确定是否Jest不查找mock。

也请不要认为moduleNameMapper不工作,因为你似乎假设它做。它不会替换路径部分,它会解析从api<rootDir>/api开始的每个require !(该目录没有任何根文件。)你应该使用ModulePaths。

最新的Jest v17应该会给您更多关于副本的信息。


注意:配置选项enableAutomock不存在,您是指automock吗?(或者它根本就不应该在那里?)

注意:与mock的命名约定类似,在__tests__文件夹内的测试文件通常也保留模块的名称。另一种方法是添加.spec.test后缀,并将测试文件保存在同一文件夹中。在这两种情况下,都很容易找到相应的测试文件。因此,__tests__/index.jsindex.test.js都是很好的名字。