用 Jest 测试 React 组件
Testing a React Component with Jest
我开始了一个关于 React 的新 "Hello World" 项目,看起来像这样:
import React, { Component } from 'react';
export class Home extends 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)
});
}
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>
</div>
);
}
}
基本上,用户输入两个数字,当他点击"Add"按钮时,结果就会出现在屏幕上。
当我 运行 组件时,它似乎可以工作,但我想用 Jest 测试它(也是为了熟悉 Jest)。
我已经安装了 Jest 并查看了他们网站上的所有步骤,但我仍然不确定应该如何编写测试。
在测试中,我想插入两个数字(与用户所做的相同)并检查它 returns 它们的总和。
到目前为止,我创建了一个新文件 "Home.test.js",这是我要执行的测试的一种伪代码。
当然它现在不起作用,但我很想让它起作用。
import React from 'react';
import ReactDOM from 'react-dom';
import App from './App';
import { Home } from './Home.js';
it('Returns a sum', () => {
const home = shallow(<Home />);
var first_val = Home.state.val1;
var second_val = Home.state.val2;
var result = first_val + second_val;
expect(result).toEqual(Home.state.result);
});
提前致谢。
代码:
it('returns a sum',()=>{
const home = shallow(<Home />);
var first_val = home.state().val1;
var second_val = home.state().val2;
var result = first_val + second_val;
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)
})
您可能会发现它很有用。
1.Remember 要访问状态,您必须像这样调用 state()。
home.state().somevalue
Ex:- home.state().val1
2.You 已经从这里制作了包装纸。
const home = shallow(<Home />);
现在这样访问状态是错误的。
Home.state.val1;// it should be home.state().val1;
3.By default 状态包含默认值。
var first_val = home.state().val1;
var second_val = home.state().val2;
var result = first_val + second_val;
expect(result).toBe(0);//here it is.
4.To 将输入值赋给 field 。首先找到该 field 并如下模拟 onchange。
const inputs=home.find('input')
inputs.at(0).simulate('change',{target: {value: 5 } } )//observe the object
inputs.at(1).simulate('change', { target: { value: 8 } })
5.Now 要添加这些值,请调用添加按钮。
home.find('button').simulate('click')
6.Your 任务还没有完成!别忘了打这个电话。
home.update()
7.Now 检查值
expect(home.state().result).toBe(13)
我开始了一个关于 React 的新 "Hello World" 项目,看起来像这样:
import React, { Component } from 'react';
export class Home extends 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)
});
}
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>
</div>
);
}
}
基本上,用户输入两个数字,当他点击"Add"按钮时,结果就会出现在屏幕上。
当我 运行 组件时,它似乎可以工作,但我想用 Jest 测试它(也是为了熟悉 Jest)。
我已经安装了 Jest 并查看了他们网站上的所有步骤,但我仍然不确定应该如何编写测试。
在测试中,我想插入两个数字(与用户所做的相同)并检查它 returns 它们的总和。
到目前为止,我创建了一个新文件 "Home.test.js",这是我要执行的测试的一种伪代码。
当然它现在不起作用,但我很想让它起作用。
import React from 'react';
import ReactDOM from 'react-dom';
import App from './App';
import { Home } from './Home.js';
it('Returns a sum', () => {
const home = shallow(<Home />);
var first_val = Home.state.val1;
var second_val = Home.state.val2;
var result = first_val + second_val;
expect(result).toEqual(Home.state.result);
});
提前致谢。
代码:
it('returns a sum',()=>{
const home = shallow(<Home />);
var first_val = home.state().val1;
var second_val = home.state().val2;
var result = first_val + second_val;
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)
})
您可能会发现它很有用。
1.Remember 要访问状态,您必须像这样调用 state()。
home.state().somevalue
Ex:- home.state().val1
2.You 已经从这里制作了包装纸。
const home = shallow(<Home />);
现在这样访问状态是错误的。
Home.state.val1;// it should be home.state().val1;
3.By default 状态包含默认值。
var first_val = home.state().val1;
var second_val = home.state().val2;
var result = first_val + second_val;
expect(result).toBe(0);//here it is.
4.To 将输入值赋给 field 。首先找到该 field 并如下模拟 onchange。
const inputs=home.find('input')
inputs.at(0).simulate('change',{target: {value: 5 } } )//observe the object
inputs.at(1).simulate('change', { target: { value: 8 } })
5.Now 要添加这些值,请调用添加按钮。
home.find('button').simulate('click')
6.Your 任务还没有完成!别忘了打这个电话。
home.update()
7.Now 检查值
expect(home.state().result).toBe(13)