CRA React应用中setupTests.js未能自动加载

12
我已经阅读过,src/setupTests.js应该在每个测试之前加载,但我仍然遇到了每个测试都失败的错误:

"Enzyme Internal Error: Enzyme expects an adapter to be configured, but found none."

这是我的src/setupTests.js文件:
import Enzyme from 'enzyme';
import Adapter from 'enzyme-adapter-react-16';
import 'whatwg-fetch';

Enzyme.configure({ adapter: new Adapter() });

这是我的 package.json 文件:

"devDependencies": {
"babel-core": "^6.26.3",
"babel-jest": "^23.6.0",
"babel-plugin-transform-class-properties": "^6.24.1",
"babel-preset-env": "^1.7.0",
"babel-preset-react": "^6.24.1",
"coveralls": "^3.0.2",
"enzyme": "^3.7.0",
"enzyme-adapter-react-16": "^1.6.0",
"enzyme-to-json": "^3.3.4",
"jest": "^23.6.0",
"react-test-renderer": "^16.5.2",
"redux-mock-store": "^1.5.3",
"regenerator-runtime": "^0.12.1",
"whatwg-fetch": "^3.0.0"
}

我正在通过 npm run test 运行一个“测试”脚本。

"scripts": {
  "test": "jest",
  "test:watch": "jest --watch",
  "test:updateSnapshots": "jest --updateSnapshot"
}

我在每个测试文件的开头都会写下以下形式的代码:

import React from 'react';
import { shallow } from 'enzyme';

我正在使用 React 16 和 react-scripts 2.1.1

有没有人能看出我做错了什么?


1
你尝试重新启动测试运行器了吗?这与我的工作设置几乎完全相同。 - David
@DeveloperDavo 我已经删除了我的 node_modules 文件夹并多次运行了 npm install。这算是重新启动测试运行器吗?在这种情况下,测试运行器到底是什么? - Travis
间接地:)。重新运行 npm run test(或 npm test)就可以解决问题了,但我现在看到这个问题已经得到了答复。 - David
5个回答

6

如果你将以下内容添加到你的package.json文件中,它是否能够工作?

"scripts": {
  ...
  "test": "react-scripts test",
  ...

}

这个有效。有什么想法为什么?我猜“Jest”命令绕过了CRA默认设置? - Travis
我认为是因为 react-scripts test 创建了一个 Jest 配置,而通过运行 jest 来绕过这个配置。 这里是源代码 - David

3

更新 package.json 文件。

"scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build",
    "test": "react-scripts test setupFile ./src/setupTests.js",
    "eject": "react-scripts eject"
  }

2

我也因同样的错误而到这里,但原因不同:

我的文件名中有拼写错误:

  • src/setupTest.js应该是src/setupTest*s*.js

然后默认的CRA(creat-react-app)package.json命令将适配器加载到您的测试中:

  • "test": "react-scripts test"

你帮我省去了一个小时的调试时间,谢谢! - Mickael Kerjean

1
如果您在create-react-app的npm test脚本的观察模式下创建了setupTests.js文件,则需要退出观察模式并重新启动它才能开始工作。

0

它应该可以在这个配置下工作。因为相同的配置在我的应用中也能够工作。尝试将导入放在测试文件中。

import "../setupTests"

有时候这个会起作用。


我之前在package.json中放置了一个“setupTestFrameworkScriptFile”覆盖,它可以工作,但会破坏vs code调试器,因为这不应该是必需的。 - Travis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接