开玩笑测试:在打字稿组件导入中找不到模块

Posted

技术标签:

【中文标题】开玩笑测试:在打字稿组件导入中找不到模块【英文标题】:Jest test: Cannot find module, in typescript component import 【发布时间】:2019-06-17 18:20:13 【问题描述】:

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

在“Astronaut.tsx”中找不到模块“../../shared/models”

从 '../../shared/models' 导入 moonHoldings ;

我的简单 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"  />
  </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/"
  ]

还有我的文件夹结构:

【问题讨论】:

【参考方案1】:

您需要为开玩笑测试做一些配置。 将此 sn-p 添加到您的 package.json 应该允许您使用自定义名称并将其映射到您的实际文件夹:

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

【讨论】:

【参考方案2】:

好的,我只是通过在 /shared 文件夹中创建一个索引文件然后以这种方式导出模型来解决这个问题(尽管它应该在没有索引文件的情况下仍然可以工作):

import moonHoldings from '../../shared';

还有 index.js:

export  moonHoldings, nomicsLink  from './copy';

【讨论】:

你在开玩笑的测试文件中导入它们了吗 这似乎更像是一种解决方法而不是答案。

以上是关于开玩笑测试:在打字稿组件导入中找不到模块的主要内容,如果未能解决你的问题,请参考以下文章

导入 AntDesign 组件的打字稿警告“找不到模块”

如何将图像导入打字稿?他说“找不到模块”

打字稿导入文本文件“错误 TS2307:找不到模块”

打字稿在vscode中找不到名称'test'

我无法导入已发布的打字稿库,出现以下错误:“找不到模块:无法解析 'tqt' in ...”

测试套件无法运行 - 找不到模块“打字稿”