次の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-native
でStyleSheet
を検索するのはなぜですか?
そして、なぜStyleSheet
が見つからないのですか?
同じ問題に遭遇しました。追加
"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/'
}
この問題を修正するには2つの方法があります。
1。ルートフォルダーにjest.config.js
というファイルがないか、またはdeleteがないことを確認してください。
2。カスタムjest.config.js
ファイルが必要な場合は、そのファイルにプリセットノードがあることを確認してください。
そのようです:
module.exports = {
preset: "react-native",
verbose: true,
};
私も同じ問題に直面していました。今では解決されています。
私の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'],
};
私はこれからの指示に従いました リンク