gpt4 book ai didi

javascript - 使用 Jest 的 React js 测试失败

转载 作者:行者123 更新时间:2023-11-30 11:12:30 24 4
gpt4 key购买 nike

我正在尝试测试我的 Home.js 组件,该组件获取两个数字的输入并通过单击“添加”按钮,结果显示在屏幕上。

请注意,index.js 看起来与 Home.js 组件完全一样,这是它们的样子:

import 'bootstrap/dist/css/bootstrap.css';
import 'bootstrap/dist/css/bootstrap-theme.css';
import React from 'react';
import ReactDOM from 'react-dom';
import { LogOutButton } from './LogOutButton.js';

class Home extends React.Component {
displayName = Home.name;

state = {
result: 0,
val1: 0,
val2: 0,
};

handleChangeOne = event => {
this.setState({ val1: event.target.value });
};

handleChangeTwo = event => {
this.setState({ val2: event.target.value });
};

add = () => {
this.setState({
result: parseInt(this.state.val1) + parseInt(this.state.val2)
});
};

onLogoutClick = () => {
window.location.href = 'https://www.MICROSOFT.com';
}

render() {
return (
<div>
<h1>Hello world! The result is: {this.state.result}</h1>
<input type="text" onChange={this.handleChangeOne} />
+
<input type="text" onChange={this.handleChangeTwo} />
= <br />
<button onClick={this.add}>Add</button>
<br/><br/>
<LogOutButton onLogout={this.onLogoutClick} />
</div>
);
}
}

export default Home;
const rootElement = document.getElementById("root");
ReactDOM.render(<Home />, rootElement);

该测试检查对于任意 2 个给定数字,用户收到正确的总和。

import React from 'react';
import { shallow } from 'enzyme'
import ReactDOM from 'react-dom';
import App from './App';
import { Home } from './components/Home';

describe('Home />', () => {
it('Renders a sum', () => {
const home = shallow(<Home />);
var first_value = home.state().val1;
var second_value = home.state().val2;
var result = first_value + second_value;
expect(result).toBe(0);

const inputs = home.find('input');
inputs.at(0).simulate('change', {target: {value: 5} } );
inputs.at(1).simulate('change', { target: { value: 8 } });
home.find('button').simulate('click');
home.update();
expect(home.state().result).toBe(13);
});
});

测试运行完美,但现在出了点问题,这是我在运行测试后得到的错误:

 FAIL  src/Home.test.js
● Test suite failed to run

Invariant Violation: Target container is not a DOM element.

50 | export default Home;
51 | const rootElement = document.getElementById("root");
> 52 | ReactDOM.render(<Home />, rootElement);
| ^
53 |
54 |

at invariant (node_modules/fbjs/lib/invariant.js:42:15)
at renderSubtreeIntoContainer (node_modules/react-dom/cjs/react-dom.development.js:15180:34)
at Object.render (node_modules/react-dom/cjs/react-dom.development.js:15290:12)
at Object.<anonymous> (src/components/Home.js:52:20)
at Object.<anonymous> (src/App.js:4:13)
at Object.<anonymous> (src/Home.test.js:4:12)

不知道下面的指针是什么意思

<Home />, rootElement); 

这是怎么回事?

最佳答案

根据您所说的您的测试运行良好,我想建议您将 Home 组件的这一部分分离到它自己的文件中:

const rootElement = document.getElementById("root");
ReactDOM.render(<Home />, rootElement);

那样的话,您应该能够在不受线路干扰的情况下运行测试。

还要确保 index.html 文件中带有 id="root" 的元素未在 body 元素上设置。原因是当脚本完成执行时,document 元素尚不可用。

引用@Dan Abramov 的回答here .

关于javascript - 使用 Jest 的 React js 测试失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53099045/

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