Jest:找不到要测试的模块内所需的模块(相对路径)

fer*_*res 8 javascript unit-testing node.js reactjs jestjs

我有这个组件:

import React from 'react';
import VideoTag from './VideoTag';
import JWPlayer from './JWPlayer';

class VideoWrapper extends React.Component {
//... component code
}
Run Code Online (Sandbox Code Playgroud)

基于某些逻辑的内部渲染另一个组件(VideoTag或JWPlayer),但当我尝试在jest文件中测试它时,我得到错误:

找不到模块'./VideoTag'

三个组合在同一个目录中,这就是为什么它实际工作的时候我在浏览器中看到它并在浏览器中看到它,但看起来Jest在解决这些相对路径时遇到问题,这是jest文件:

jest.dontMock('../src/shared/components/Video/VideoWrapper.jsx');

import React from 'react';
import ReactDOM from 'react-dom';
TestUtils from 'react-addons-test-utils';

import VideoWrapper from '../src/shared/components/Video/VideoWrapper.jsx';

describe('VideoWrapper tests', () => {
  it('Render JWPlayer', () => {

      let vWrapper = TestUtils.renderIntoDocument(
      < VideoWrapper model={model} />
  );

  });
});
Run Code Online (Sandbox Code Playgroud)

错误在线:

import VideoWrapper from '../src/shared/components/Video/VideoWrapper.jsx';
Run Code Online (Sandbox Code Playgroud)

如何告诉jest如何处理相对路径?

fer*_*res 10

问题不在于路径,它只是在寻找具有.js扩展名的模块,在jest配置中添加.jsx后它才起作用:

"moduleFileExtensions": [
  "js",
  "jsx"
]
Run Code Online (Sandbox Code Playgroud)


Jus*_*tin 10

我还必须将moduleNameMappertsconfig 路径映射添加到我的 jest 配置中,以便让我的测试识别我设置的路径映射。像这样的东西:

"moduleNameMapper": {
      "^yourPath/(.*)": "<rootDir>\\yourPath\\$1"
    }
Run Code Online (Sandbox Code Playgroud)

希望这会帮助某人!

  • 这救了我,谢谢!!!我在本地有多个库,使用“tsconfig”管理它们的“path”,我猜“jest”或“typescript”没有正确映射源文件的模块导入(尽管它对于测试文件中的导入工作得很好)。 (2认同)