web-dev-qa-db-ja.com

「react-native-implementation.js」からモジュールが見つかりません

次の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ではなくreact-nativeStyleSheetを検索するのはなぜですか?

そして、なぜStyleSheetが見つからないのですか?

12
octavian

同じ問題に遭遇しました。追加

"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/'
}
14
koleary

この問題を修正するには2つの方法があります。
1。ルートフォルダーにjest.config.jsというファイルがないか、またはdeleteがないことを確認してください。
2。カスタムjest.config.jsファイルが必要な場合は、そのファイルにプリセットノードがあることを確認してください。
そのようです:

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

私も同じ問題に直面していました。今では解決されています。

私の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'],
};

私はこれからの指示に従いました リンク

0
Sayantan Dey