开玩笑不预处理我的 JSX

IT技术 reactjs jestjs
2021-03-24 04:48:54

我正在遵循Jest 教程来测试 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;
4个回答

在项目根目录中使用 .bablerc 文件为我修复了它。

我在开发时没有使用 .babelrc 文件,因为我在 webpack 配置文件中定义了我的预设。但事实证明,当你用 jest 运行单元测试时,jest 并不知道这个预设,因为它不知道 webpack。所以简单地添加一个带有预设的 .babelrc 文件也应该为你解决这个问题。

.babelrc 的内容:

{ "presets": ["es2015", "react"] }

非常有帮助的答案,这让我发疯了!谢谢!
2021-05-26 04:48:54
我们可以在 jest 配置上定义自定义 babel 配置吗?因为在我的情况下我不能.babelrc用于多构建原因
2021-06-03 04:48:54

我认为您可能只需要将testFileExtensions添加testFileExtensionsjestpackage.json部分。

参见 babel-jest 的 README.md:

https://github.com/babel/babel-jest

我在这里发现了一个类似的问题:stackoverflow.com/questions/28870296/... - 这有帮助吗?
2021-06-05 04:48:54
谢谢,我有testFileExtensionsmoduleFileExtensions同在那里ES6,但它仍然有同样的错误抛出
2021-06-18 04:48:54

我遇到了类似的问题,解决方案是将其添加到jest 配置文件中

"transform": {
      "^.+\\.js$": "babel-jest",
      "^.+\\.jsx$": "babel-jest"  // This line was missing
}

在我们的项目中需要它的原因是因为我们覆盖了"transform"jest 配置文件中的默认值。

将我的.babelrc配置文件更改babel.config.jsbabel.config.json为我工作,因为 Jest 忽略了.babelrc.

我刚刚添加了一个.babelrc并发现您的陈述是不真实的,因为它改变了我一直在运行的 jest 命令的行为。
2021-05-24 04:48:54
取决于您运行的 Jest 版本。
2021-06-05 04:48:54
您可以在答案中发布哪些版本的 Jest 忽略了 babelrc?
2021-06-12 04:48:54
我不确定哪些版本会忽略它。但可以肯定的是 v 24.x 忽略了它。
2021-06-20 04:48:54