找不到'react-native-implementation.js'中的模块

oct*_*ian 12 javascript gulp jestjs react-native

我有以下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();
});
Run Code Online (Sandbox Code Playgroud)

IndexSign这我打电话调用此组件StyleSheet组成:

import {StyleSheet} from 'react-native';

export default StyleSheet.create({
  //some styles
});
Run Code Online (Sandbox Code Playgroud)

为了测试,我使用的是Gulp:

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

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

? 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)
Run Code Online (Sandbox Code Playgroud)

知道为什么会这样吗?

为什么搜索StyleSheetreact-native-implementation.js,而不是react-native,这是我进口的?

为什么它找不到StyleSheet

小智 15

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

"jest": {
    "preset": "react-native"
},
Run Code Online (Sandbox Code Playgroud)

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/'
}
Run Code Online (Sandbox Code Playgroud)