我有一个React应用程序(不使用创建React应用程序),使用TypeScript, Jest, Webpack和Babel构建。当试图运行纱线笑话时,我得到以下错误:

我已经尝试删除所有包并重新添加它们。它不能解决这个问题。我看过类似的问题和文档,但我仍然误解了一些东西。我甚至按照另一个指南从头开始设置这个环境,但我的代码仍然遇到了这个问题。

依赖关系包括……

"dependencies": {
  "@babel/plugin-transform-runtime": "^7.6.2",
  "@babel/polyfill": "^7.6.0",
  "babel-jest": "^24.9.0",
  "react": "^16.8.6",
  "react-dom": "^16.8.6",
  "react-test-renderer": "^16.11.0",
  "source-map-loader": "^0.2.4"
},
"devDependencies": {
  "@babel/core": "^7.6.0",
  "@babel/preset-env": "^7.6.0",
  "@babel/preset-react": "^7.0.0",
  "@types/enzyme": "^3.9.2",
  "@types/enzyme-adapter-react-16": "^1.0.5",
  "@types/jest": "^24.0.13",

组件的导入行…

import * as React from "react";
import { BrowserRouter as Router, Route, Switch } from "react-router-dom";
import HomePage from "./components/pages";
import {
  Footer,
  Header,
  Navigation,
} from "./components/shared";

测试文件....

import * as React from "react";
import * as renderer from "react-test-renderer";
import App from "../App";

it("Renders the Footer correctly", () => {
  const tree = renderer
    .create(<App />)
    .toJSON();
  expect(tree).toMatchSnapshot();
});

我希望能够在组件中使用命名导入,而不会导致测试失败。如果我在解决方案中只使用默认导入,似乎可以解决这个问题,但我宁愿不走那条路。


当前回答

我发现,当您尝试加载为浏览器制作的依赖项时,可能会触发此错误,因此不能使用jest (node)。

我在解决@zip.js/zip.js lib的这个问题时遇到了很多麻烦。但我可以这样做:

这是我的jest.config.js。根据你的需要调整它。这里的技巧是moduleNameMapper,它将使所有对zip.js的导入指向我在根文件夹中创建的__mocks__/@zip.js/zip.js文件。

export default {
  preset: 'ts-jest',
  testEnvironment: 'node',
  moduleNameMapper: {
    '@zip.js/zip.js': '<rootDir>/__mocks__/@zip.js/zip.js',
  },
}

下面是我在<rootDir>/__mocks__/@zip.js/zip.js文件中的内容:

module.exports = {}

其他回答

我发现,当您尝试加载为浏览器制作的依赖项时,可能会触发此错误,因此不能使用jest (node)。

我在解决@zip.js/zip.js lib的这个问题时遇到了很多麻烦。但我可以这样做:

这是我的jest.config.js。根据你的需要调整它。这里的技巧是moduleNameMapper,它将使所有对zip.js的导入指向我在根文件夹中创建的__mocks__/@zip.js/zip.js文件。

export default {
  preset: 'ts-jest',
  testEnvironment: 'node',
  moduleNameMapper: {
    '@zip.js/zip.js': '<rootDir>/__mocks__/@zip.js/zip.js',
  },
}

下面是我在<rootDir>/__mocks__/@zip.js/zip.js文件中的内容:

module.exports = {}

不知道为什么,怎么解决的,但我解决问题的方法真的很有趣。 只需在src文件夹中添加__mocks__文件夹,并在__mocks__中创建一个名为axios.js的空文件

回答这个问题已经太迟了:) 在尝试了所有可能的解决方案后,这对我来说是有效的: 我的解决方案是:

创建一个名为jest/mocks/@react-native-firebase/crashlytics.js的文件 export default () => ({log: jest.fn(), recordError: jest.fn(),});

创建名为jest/jestSetupFile.js的文件 import mockFirebaseCrashlytics from './mocks/@react-native-firebase/crashlytics';

害怕。mock('@react-native-firebase/crashlytics', () => mockFirebaseCrashlytics);

在包中.json 添加 “jest”: { “setupFiles”: [“./jest/jestSetupFile.js”] },

匹配的文件扩展名:

我导入一个名为Todo的文件。./src/Todo/。当我把它改成Todo.js时,问题就消失了。

免责声明:我不确定组件的文件扩展名是jsx还是js的要求是什么。它完全没有影响到我,但我可以想象它可能会扰乱智能感知或片段。

我通过改变tsconfig来解决这个问题。Json到兼容的本机输出

"module": "commonjs", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'. */

这并非在所有情况下都是理想的,但你可能会接受。