gpt4 book ai didi

javascript - 测试套件无法运行。 Invariant Violation : _registerComponent(. ..): 目标容器不是 DOM 元素

转载 作者:太空狗 更新时间:2023-10-29 13:50:09 24 4
gpt4 key购买 nike

我正在尝试测试我的 React 组件的渲染,但出现以下错误:不变违规:_registerComponent(...):目标容器不是 DOM 元素。如果我更改以下在 document.body 上呈现我的组件的位置,则错误不存在,如果这个位置是一些 div,body 中有一些 id,则错误存在。

这里是我的组件:

import React, {Component} from 'react';
{render} from 'react-dom';
import Demo from './demo/demo'
import Demo2 from './demo2/demo2'
require('./app-styles.sass')

export class App extends Component {
render() {
return (
<div>
<Demo2 />
<Demo />
<div>Hello jest from react</div>
</div>
);
}
}
render(<App/>, document.getElementById('helloWorldRoot'));

该组件的测试:

import React from 'react'
import {shallow, mount} from 'enzyme'
import {App} from './app'

describe('base component', () => {
it('renders as a div', () => {
const application = shallow(<App />);
expect(application).toMatchSnapshot();
});
});

这是我的 html:

    <!DOCTYPE html>
<html>
<head>
<title>Hello jests' tests</title>
<link rel="stylesheet" href="dist/app.css">
</head>

<body>
<div id="helloWorldRoot"></div>
<script type="text/javascript" src="dist/app.js"></script>
</body>

这里有什么问题?我很乐意提供一些建议。

最佳答案

您正在测试的文件,app.js , 正在尝试查找 ID 为 helloWorldRoot 的 DOM 元素在最后一行。当 Enzyme 呈现该元素时,此 DOM 元素不存在 - 因此出现错误消息。

要解决此问题,请将 <App /> 分开组件并将其渲染成两个文件。确保将应用程序挂载到 DOM 的文件(我们称它为 main.js )只做这件事而不做其他事情。另一个文件,app.js ,然后可以使用 Jest 和 Enzyme 进行测试。

所以 main.js 应该做的不超过:

import React from 'react';
import { render } from 'react-dom';
import App from './app';

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

当然,相应的行应该从 app.js 中删除.

关于javascript - 测试套件无法运行。 Invariant Violation : _registerComponent(. ..): 目标容器不是 DOM 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43590183/

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