javascript - 在 typescript 组件导入中开 Jest 测试 : Cannot find module,

标签 javascript reactjs typescript jestjs next.js

我的样式对象的路径是正确的,但不确定为什么会出现以下错误:

Cannot find module '../../shared/models' from 'Astronaut.tsx'

import { moonHoldings } from '../../shared/models';

我的简单 Jest 测试:

import React from 'react';
import { shallow } from 'enzyme';
import toJson from 'enzyme-to-json';

// @ts-ignore (works with .tsx)
import Astronaut from '../Astronaut.tsx';

describe('<Astronaut /> component', () => {
  describe('should render', () => {
    const wrapper = shallow(<Astronaut showLogo={true} />);
    it ('should render a component matching the snapshot', () => {
      const tree = toJson(wrapper);
      expect(tree).toMatchSnapshot();
      expect(wrapper).toHaveLength(1);
    });
  });
});

宇航员组件

import React from 'react';

import { moonHoldings } from '../../shared/models';  // <-- The problem
import { astronaut } from '../../styles'; // <-- This works

const { AstronautContainer, Heading } = astronaut;

interface LogoCheck {
  showLogo: boolean;
}

export default (showLogo: LogoCheck) =>  (
  <AstronautContainer>
    { showLogo.showLogo === true ? <Heading>{moonHoldings}</Heading> : null }
    <img src="static/astronaut.png" alt="astronaut" />
  </AstronautContainer>
);

我的 Package.json 的 Jest 配置部分

"jest": {
  "setupTestFrameworkScriptFile": "<rootDir>/jest.setup.js",
  "testPathIgnorePatterns": [
    "<rootDir>/.next/",
    "<rootDir>/node_modules/"
  ],
  "transform": {
    "\\.(gql|graphql)$": "jest-transform-graphql",
    ".*": "babel-jest",
    "^.+\\.js?$": "babel-jest"
  },
  "moduleFileExtensions": [
    "js",
    "json",
    "ts",
    "tsx"
  ],
  "modulePaths": [
    "<rootDir>/components/",
    "<rootDir>/pages/",
    "<rootDir>/shared/"
  ]
}

我的文件夹结构:

enter image description here

enter image description here

最佳答案

你需要为你的 Jest 测试做一些配置。 将此代码段添加到您的 package.json 应该允许您使用自定义名称并将其映射到您的实际文件夹:

"moduleNameMapper": {
  "^@fooBar/(.*)": "<rootDir>/src/barFoo/$1"
},

关于javascript - 在 typescript 组件导入中开 Jest 测试 : Cannot find module,,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54339452/

相关文章:

javascript - 使用 mongoose 保存新数据时避免重复

javascript - 如何使用 React + Flux 快速渲染 >10000 个项目?

javascript - 在 Redux 中没有正确地将 JSON 数据从 reducer 传递到组件

javascript - 如何编写单个 Jquery 函数来触发文档更改和就绪事件

javascript - 从本地 html/javascript(没有网络服务器)访问 google apis

javascript - 使用 Storybook 渲染多个变体

javascript - Flow 不理解 proptypes

angular - Ionic Framework 保持点击事件

typescript - 如何在 Jest 中模拟一个函数

javascript - 当 observable 为空时,骨架文本不显示