【问题标题】:Cannot find module from 'react-native-implementation.js'无法从“react-native-implementation.js”中找到模块
【发布时间】:2018-04-26 11:13:09
【问题描述】:

我有以下 Jest 测试:

import React from 'react';
import IndexSign from '../IndexSign';
import renderer from 'react-test-renderer';

it('renders correctly', () => {
  const tree = renderer.create(
    <IndexSign index={1}/>
  ).toJSON();
  expect(tree).toMatchSnapshot();
});

我调用的IndexSign 组件调用了这个StyleSheet 组件:

import {StyleSheet} from 'react-native';

export default StyleSheet.create({
  //some styles
});

为了测试,我使用 Gulp:

gulp.task('tests', () => {
    process.env.NODE_ENV = 'test';
    return gulp.src('src').pipe(jest({
    }));
});

问题是当我运行这个测试时,我得到:

● Test suite failed to run

Cannot find module 'StyleSheet' from 'react-native-implementation.js'

  at Resolver.resolveModule (../node_modules/jest-resolve/build/index.js:142:17)
  at Object.StyleSheet (../node_modules/react-native/Libraries/react-native/react-native-implementation.js:98:25)
  at Object.<anonymous> (styles/Styles.js:5:13)

知道为什么会这样吗?

为什么它在react-native-implementation.js 中搜索StyleSheet 而不是我导入的react-native?

为什么找不到StyleSheet?

【问题讨论】:

  • 您找到解决方案了吗?也偶然发现了这个

标签: javascript react-native gulp jestjs


【解决方案1】:

我也遇到了同样的问题。现在已经解决了。

我的 package.json 看起来像这样:

{
  "name": "ReactNativeTDDStarterKit",
  "version": "0.0.1",
  "private": true,
  "scripts": {
  "start": "node node_modules/react-native/local-cli/cli.js start",
     "test": "jest"
   },
  "dependencies": {
     "react": "16.8.3",
     "react-native": "0.59.5"
   },
   "devDependencies": {
     "@babel/core": "7.4.4",
     "@babel/runtime": "7.4.4",
     "babel-jest": "24.8.0",
     "babel-preset-flow": "^6.23.0",
     "babel-preset-react-native": "4.0.0",
     "enzyme": "^3.3.0",
     "enzyme-adapter-react-16": "^1.1.1",
     "enzyme-to-json": "^3.3.1",
     "jest": "24.8.0",
     "metro-react-native-babel-preset": "0.54.0",
     "react-dom": "^16.8.6",
     "react-test-renderer": "16.8.3"
    },
    "jest": {
      "preset": "react-native",
      "snapshotSerializers": [
        "enzyme-to-json/serializer"
      ],
      "setupFiles": [
        "<rootDir>/jest/setup.js"
      ]
    }
  }

我使用的是 react-native 0.59.5,我没有手动重置 .babelrc 或 jest.config.js,我只是安装了依赖项。安装完成后它会自动为我生成预设。我的 babel.config.js 看起来像:

module.exports = {
   presets: ['module:metro-react-native-babel-preset'],
};

我遵循了Link的指示

【讨论】:

    【解决方案2】:

    有两种方法可以解决此问题。
    1. 确保您的根文件夹中没有或删除任何名为 jest.config.js 的文件。
    2.如果你想有一个自定义的jest.config.js文件,请确保你有一个预设节点。
    像这样:

     module.exports = {
        preset: "react-native",
        verbose: true,
      };
    

    【讨论】:

      【解决方案3】:

      我遇到了同样的问题。添加

      "jest": {
          "preset": "react-native"
      },
      

      在package.json 中为我修复了错误。

      如果您保留单独的配置文件,例如 jest.config.js。在其中添加预设。查看示例配置文件

      module.exports = {
        preset: 'react-native',
        setupFiles: ['<rootDir>/__test__/setup.js'],
        moduleNameMapper: {
          '\\.(css|less)$': 'identity-obj-proxy',
          '^.+\\.(jpg|jpeg|gif|png|mp4|mkv|avi|webm|swf|wav|mid)$': 'jest-static-stubs/$1'
        },
        globals: {
          __DEV__: true
        },
        collectCoverageFrom: [
          '**/src/**/*.{js,jsx}',
          '!**/src/**/style.js',
          '!**/src/**/index.js',
          '!**/src/theme/**',
          '!**/android/**',
          '!**/ios/**',
          '!**/node_modules/**',
          '!**/scripts/**',
          '!**/__test__/**'
        ],
        verbose: true,
        testPathIgnorePatterns: ['/node_modules/'],
        testResultsProcessor: 'jest-sonar-reporter',
        testURL: 'http://localhost/'
      }
      

      【讨论】:

      • 如果项目是用react-native init创建的,这就为你完成了
      • 项目是用react-native init创建的,没有改变同样的错误
      • 我的package.json 中已经有了这个设置,但它仍然报错
      • 好的,我正在处理的项目有单独的jest.config.js 文件。当我提到预设时,它开始工作。所以请用你知道的不同场景更新答案。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-27
      • 2023-03-22
      • 2022-06-29
      • 1970-01-01
      • 2020-06-05
      • 2020-06-22
      相关资源
      最近更新 更多