reactjs - 开 Jest ,没有预处理我的 JSX

标签 reactjs jestjs

我正在关注Jest tutorial测试一个 React 组件,我的 jsx 遇到了预处理问题。我认为错误是由于预处理造成的,错误消息不是很有帮助。谷歌搜索显示旧版本的react/jest存在类似的错误,这些错误通过包含 /** @jsx React.DOM */ docblock 来修复,据我所知,该错误已修复。

当我运行测试时:

Using Jest CLI v0.8.0, jasmine1
 FAIL  spec/MyComponent_spec.js
Runtime Error
SyntaxError: /Users/asdf/react/stuff-react/spec/MyComponent_spec.js: Unexpected token (13:6)
npm ERR! Test failed.  See above for more details.

有问题的行是应该渲染我的组件的行:

jest.dontMock('../src/MyComponent');

let React = require('react');
let ReactDOM = require('react-dom');
let TestUtils = require('react-addons-test-utils');

const MyComponent = require('../src/MyComponent');

describe('MyComponent', function(){
  it('render', function(){

    var myComponent = TestUtils.renderIntoDocument(
      // This is the line referenced in the test error
      <MyComponent />
    )
    var myComponentNode = ReactDOM.findDOMNode(myComponent);

    expect(myComponentNode.textContent).toEqual('hi');
  });
});

我认为我的 package.json 负责告诉 jest 预处理该文件?

 "scripts": {
    "test": "jest"
  },
  "jest": {
    "testDirectoryName": "spec",
    "scriptPreprocessor": "<rootDir>/node_modules/babel-jest",
    "unmockedModulePathPatterns": [
      "<rootDir>/node_modules/react",
      "<rootDir>/node_modules/react-dom",
      "<rootDir>/node_modules/react-addons-test-utils",
      "<rootDir>/node_modules/fbjs"
    ]
  },

我的组件:

import React from 'react';

class MyComponent extends React.Component({
  render () {
    return (
      <div>
        hi
      </div>
    )
  }
});

export default MyComponent;

最佳答案

使用项目根目录中的 .bablerc 文件为我解决了这个问题。

我在开发时没有使用 .babelrc 文件,因为我在 webpack 配置文件中定义了预设。但事实证明,当您使用 jest 运行单元测试时,jest 不知道这个预设,因为它不知道 webpack。因此,只需添加带有预设的 .babelrc 文件就可以解决您的问题。

.babelrc 的内容:

{ “预设”:[“es2015”,“ react ”] }

关于reactjs - 开 Jest ,没有预处理我的 JSX,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33958757/

相关文章:

javascript - 在第二个提取请求中使用提取响应

node.js - 如何在 React 中显示组件并在每次显示时更新其生命周期?

javascript - 使用组件变量来 react Native Promises 和 componentDidMount 行为

javascript - 开 Jest 和console.dir不会显示整个对象

javascript - 如何使用 HOC 编写适当的 Jest 测试?

node.js - 无法测试 mongo 聚合 MongoError : Unrecognized pipeline stage name: '$set'

javascript - React 组件卸载后如何检查对象、订阅、网络请求待清理?

javascript - 无法在客户端填充缩略图

reactjs - 使用 userEvent.keyboard() 进行的测试未通过,但它可以在浏览器中运行

reactjs - 导出 Jest 和 ES6 未采用的默认路径