设置Jest和Enzyme以测试React 15无法找到模块react / lib / ReactTestUtils [英] Setting up Jest and Enzyme to test React 15 cannot find module react/lib/ReactTestUtils

查看:143
本文介绍了设置Jest和Enzyme以测试React 15无法找到模块react / lib / ReactTestUtils的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个反应项目,我正在尝试设置一些测试

I have a react project and am trying to setup some tests

由于以下设置指南/问题:

Due to the following setup guides / issues:

  • https://github.com/facebook/jest/issues/1353 ,
  • https://github.com/facebook/react/issues/7386 ,
  • http://facebook.github.io/jest/docs/tutorial-react.html#content ,
  • http://airbnb.io/enzyme/

我安装了以下依赖项:


  • react-addons-test-utils 15.3.2

  • react 15.4.0-rc.4

  • react-dom 15.4.0-rc-4

  • jest 16.0.2

  • babel-jest 16.0.0

  • babel- preset-es2015 6.18.0

  • babel-preset-es2015-loose 7.0.0

  • babel-preset-react 6.16.0

  • react-addons-test-utils 15.3.2
  • react 15.4.0-rc.4
  • react-dom 15.4.0-rc-4
  • jest 16.0.2
  • babel-jest 16.0.0
  • babel-preset-es2015 6.18.0
  • babel-preset-es2015-loose 7.0.0
  • babel-preset-react 6.16.0

我的package.json包含以下Jest配置:

My package.json contains the following Jest configuration:

 "jest": {
    "bail": false,
    "collectCoverage": true,
    "collectCoverageFrom": [
      "<rootDir>/src/**/*.js",
      "!<rootDir>/node_modules/**"
    ],
    "coverageDirectory": "coverage",
    "coveragePathIgnorePatterns": [
      "<rootDir>/node_modules"
    ],
    "coverageThreshold": {
      "global": {
        "branches": 50,
        "functions": 50,
        "lines": 50,
        "statements": 50
      }
    },
    "globals": {
      "SOURCEMAP": true
    },
    "modulePaths": [
      "<rootDir>/src",
      "<rootDir>/sass",
      "<rootDir>/public",
      "<rootDir>/node_modules"
    ],
    "resetModules": true,
    "testPathDirs": [
      "<rootDir>/test"
    ],
    "testRegex": "(/test/.*|\\.(test|spec))\\.(js|jsx)$",
    "verbose": true
  }

我的组件(GenericButton)放在< rootDir> /components/buttons/GenericButton.js 和我在< rootDir> /test/componnets/buttons/GenericButtonTest.js 中的测试,内容如下:

I have my component (GenericButton) placed in <rootDir>/components/buttons/GenericButton.js and my test in <rootDir>/test/componnets/buttons/GenericButtonTest.js with contents as following:

import React from 'react';
import GenericButton from 'components/buttons/GenericButton';
import { shallow } from 'enzyme';
import { shallowToJson } from 'enzyme-to-json';
import ReactTestUtils from 'react-addons-test-utils'

describe('Generic Button', () => {
    test('Button action called when clicked', () => {
        var clicked = false;
        const component = shallow(
            <GenericButton action={() => {
                clicked = true;
            }}/>
        );

        console.log("Clicking the button!");
        ReactTestUtils.Simulate.click(component);
        expect(clicked).toBeTruthy();
    });
})

我的babelrc文件如下:

My babelrc file is as follows:

{
  "presets": [
    "es2015-loose",
    "react",
    "stage-0"
  ],
  "plugins": [
    "babel-root-slash-import",
    "transform-decorators-legacy",
    "react-hot-loader/babel",
    "transform-runtime"
  ],
  "compact": true,
  "ignore": [
    "/node_modules/(?!react-number-input)"
  ]
}

当我运行我的测试时,我收到以下错误:

when I run my test however, I get the following error:

> admin-console@4.1.0 test C:\path\to\project
> jest

 FAIL  test\components\buttons\GenericButtonTest.js
  ● Test suite failed to run

    Cannot find module 'react/lib/ReactTestUtils' from 'index.js'

      at Resolver.resolveModule (node_modules\jest-resolve\build\index.js:144:17)
      at Object.<anonymous> (node_modules\react-addons-test-utils\index.js:1:107)
      at node_modules\enzyme\build\react-compat.js:128:19

----------|----------|----------|----------|----------|----------------|
File      |  % Stmts | % Branch |  % Funcs |  % Lines |Uncovered Lines |
----------|----------|----------|----------|----------|----------------|
All files |  Unknown |  Unknown |  Unknown |  Unknown |                |
----------|----------|----------|----------|----------|----------------|
Test Suites: 1 failed, 1 total
Tests:       0 total
Snapshots:   0 total
Time:        5.843s
Ran all test suites.
  console.error node_modules\enzyme\build\react-compat.js:131
    react-addons-test-utils is an implicit dependency in order to support react@0.13-14. Please add the appropriate version to your devDependencies. See https://github.com/airbnb/enzyme#installation

npm ERR! Test failed.  See above for more details.

我可以做些什么来做这个简单的测试通过?

What can I do to make this simple test pass?

编辑:react-lib / ReactTestUtils,react-lib-test-utils需要的文件不在node_modules / react / lib文件夹中。

The file react/lib/ReactTestUtils which react-addons-test-utils is requiring is not in the node_modules/react/lib folder.

这是通过将react-addons-test-utils升级到15.4.0-rc.3来解决的,但后来我得到了:

This was fixed by upgrading react-addons-test-utils to 15.4.0-rc.3 but then I got:

TypeError: Cannot read property '__reactInternalInstance$t476n6b4jes0zxw0n18vbzkt9' of undefined

  at getClosestInstanceFromNode (node_modules\react-dom\lib\ReactDOMComponentTree.js:106:11)
  at Object.getInstanceFromNode (node_modules\react-dom\lib\ReactDOMComponentTree.js:140:14)
  at Object.click (node_modules\react-dom\lib\ReactTestUtils.js:326:74)
  at Object.<anonymous> (test\components\buttons\GenericButtonTest.js:17:67)


推荐答案

目前您的测试中不能同时使用 ReactTestUtils 。幸运的是,您也可以用酶模拟点击。唯一的问题是模拟不会传播到组件子项,因此您需要先找到子项并调用模拟上它。

You can't use ReactTestUtils and enzyme together in your test at the moment. Fortunately you can simulate the click with enzyme as well. The only problem is that simulate does not propagate to the components childs, so you need to find the child first and call simulate on it.

import React from 'react';
import GenericButton from 'components/buttons/GenericButton';
import { shallow } from 'enzyme';
import { shallowToJson } from 'enzyme-to-json';

describe('Generic Button', () => {
    test('Button action called when clicked', () => {
        var clicked = false;
        const component = shallow(
            <GenericButton action={() => {
                clicked = true;
            }}/>
        );
        component.find('selectrorOfChildWithClickHandler').first().simulate('click')
        expect(clicked).toBeTruthy();
    });
})

这篇关于设置Jest和Enzyme以测试React 15无法找到模块react / lib / ReactTestUtils的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆