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

Aja*_*jai 5 javascript unit-testing reactjs jestjs enzyme

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

文件夹结构

app
  - api
    - api1
      __mocks__
          index.js
      - index.js
    - api2
      __mocks__
          index.js
      - index.js
  - components
    -component1
       - index.js
       __tests__
           component1.test.js
Run Code Online (Sandbox Code Playgroud)

现在我有component1内部api1用来做一些请求.我目前的文件夹结构和模拟api模块有两个问题.

  1. 我应该如何命名下的文件api/__mocks__?它应该是index.js(同为index.jsapi1),或者它应该是api1.mocks.js?是否有开玩笑所需的命名约定?
  2. 现在使用当前结构jest会给我带来以下错误,

开玩笑错误:

jest-haste-map:找到重复的手动模拟:模块名称:索引

有没有关于命名模拟的文档?

这是我在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"
    }
  }
Run Code Online (Sandbox Code Playgroud)

简单的单元测试:

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(...);
  });
});
Run Code Online (Sandbox Code Playgroud)

Rob*_*rny 2

\xe2\x80\x98是否有文档谈论命名模拟?\xe2\x80\x99

\n\n

是的,文档在手动模拟部分指定:

\n\n
\n

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

\n
\n\n

也就是说,模拟的名称应该与模块的名称相同

\n\n
\n\n

\xe2\x80\x98找到重复的手动模拟\xe2\x80\x99

\n\n

使用文档时moduleNameMapper阅读

\n\n
\n

默认情况下,映射到别名的模块是未模拟的。

\n
\n\n

我不确定 Jest 是否不会以任何方式寻找模拟。

\n\n

另请注意,这moduleNameMapper并不像您想象的那样起作用。它不会替换路径部分,它会解析每个require以 例如 开头api<rootDir>/api! (这没有任何根文件。)。您应该使用ModulePaths代替。

\n\n

最新的Jest v17 应该会为您提供有关重复项的更多信息。

\n\n
\n\n

注意:配置选项enableAutomock 不存在,您的意思是automock?(或者它根本不应该存在?)

\n\n

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

\n