gpt4 book ai didi

javascript - 测试 react : Target Container is not a DOM element

转载 作者:行者123 更新时间:2023-12-03 13:00:44 24 4
gpt4 key购买 nike

我正在尝试在使用 Webpack 时使用 Jest/Enzyme 测试 React 组件。

我有一个非常简单的测试@

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

import App from './App';

it('App', () => {
const app = shallow(<App />);
expect(1).toEqual(1);
});

它拾取的相关组件是:

import React, { Component } from 'react';
import { render } from 'react-dom';

// import './styles/normalize.css';

class App extends Component {
render() {
return (
<div>app</div>
);
}
}

render(<App />, document.getElementById('app'));

但是,运行 jest导致失败:

Invariant Violation: _registerComponent(...): Target container is not a DOM element.

有错误@

at Object.<anonymous> (src/App.js:14:48)
at Object.<anonymous> (src/App.test.js:4:38)

测试文件引用第 4 行,即 <App /> 的导入,这会导致失败。堆栈跟踪显示 App.js 的第 14 行是失败的原因——无非是来自 react-dom 的渲染调用,这是我从未遇到过的挑战(应用程序可以从我的 Webpack 设置中正确呈现)。

对于那些感兴趣的人(Webpack 代码):

module.exports = {
entry: './src/App',
output: {
filename: 'bundle.js',
path: './dist'
},
module: {
loaders: [
{
test: /\.js?$/,
exclude: /node_modules/,
loader: 'babel',
query: {
presets: ['react', 'es2015']
}
},
{
test: /\.css$/,
loader: 'style!css-loader?modules&importLoaders=1&localIdentName=[name]__[local]___[hash:base64:5]'
},
{
test: /\.scss$/,
loader: 'style!css-loader?modules&importLoaders=1&localIdentName=[name]__[local]___[hash:base64:5]!sass'
}
]
}
}

还有我的package.json :

{
"name": "tic-tac-dux",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"dev": "webpack-dev-server --devtool eval --progress --colors --inline --hot --content-base dist/",
"test": "jest"
},
"jest": {
"moduleNameMapper": {
"^.+\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$": "<rootDir>/__mocks__/fileMock.js",
"^.+\\.(css|sass)$": "<rootDir>/__mocks__/styleMock.js"
}
},
"keywords": [],
"author": "",
"license": "ISC",
"devDependencies": {
"babel-core": "^6.17.0",
"babel-jest": "^16.0.0",
"babel-loader": "^6.2.5",
"babel-polyfill": "^6.16.0",
"babel-preset-es2015": "^6.16.0",
"babel-preset-react": "^6.16.0",
"css-loader": "^0.25.0",
"enzyme": "^2.4.1",
"jest": "^16.0.1",
"jest-cli": "^16.0.1",
"node-sass": "^3.10.1",
"react-addons-test-utils": "^15.3.2",
"react-dom": "^15.3.2",
"sass-loader": "^4.0.2",
"style-loader": "^0.13.1",
"webpack": "^1.13.2",
"webpack-dev-server": "^1.16.2"
},
"dependencies": {
"react": "^15.3.2",
"react-dom": "^15.3.2"
}
}

哦,如果有人要说 div 元素没有在脚本之前加载,这是我的 index.html :

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>App</title>
</head>
<body>
<div id="app"></div>
<script src="/bundle.js"></script>
</body>
</html>

造成这种特殊渲染问题的原因可能是什么?与 Jest 15.0 的新更新有关吗?

最佳答案

对于像我一样在互联网上进行梳理的其他人 - 在使用 Jest 进行测试时寻找解决方案 - 我会支持 @biphobe 的答案,说 Jest 将导致在导出时发生此错误调用 ReactDOM.render 的同一文件中的某些内容。

就我而言,我在 index.js 中导出一个对象,同时也调用 ReactDOM.render。我删除了这个导出,瞧!

关于javascript - 测试 react : Target Container is not a DOM element,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39986178/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com