在 React 组件上使用 Jest 进行单元测试
Unit Testing with Jest on React components
我是 React 和 Jest 的新手,我发现很难为以下代码编写单元测试。
我的 React 代码运行良好,但我无法弄清楚测试一部分。我试着查看了几个类似的帖子,但仍然无法找到正确的答案。
这是我的 React 组件 (MySignUpForm.js):
var React = require('react');
var ReactDOM = require('react-dom');
var profileFor;
var Gender;
var MySignUpForm = React.createClass ({
onRequiredGender: function (e) {
Gender= e.currentTarget.value
},
render : function() {
return (
<div className="col-sm-6 col-xs-6 r_pad_0">
<input className="myRadio" type="radio" name="gender" value="Male" onChange={this.onRequiredGender}/>
<span className="l_pad_5">Male</span>
</div>
<div className="col-sm-6 col-xs-6 r_pad_0">
<input className="myRadio" type="radio" name="gender" value="Female" onChange={this.onRequiredGender}/>
<span className="l_pad_5">Female</span>
</div>
)
},
});
module.exports = MySignUpForm;
我的笑话文件位于 tests 文件夹 (MySignUpFormTest.js):
jest.unmock('../MySignUpForm');
//import React from 'react';
import ReactDOM from 'react-dom';
import TestUtils from 'react-addons-test-utils';
import MySignUpForm from '../MySignUpForm';
describe('MySignUpForm', () => {
it("changes the checked state when clicked", () => {
var inputs = TestUtils.scryRenderedDOMComponentsWithClass(MySignUpForm, 'myRadio');
inputs.change = jest.genMockFunction();
expect(inputs[0].getDOMNode().checked).toBe(false);
TestUtils.Simulate.change(inputs[1], {target: {value: 'Female'}});
expect(inputs[0].getDOMNode().checked).toBe(false);
expect(inputs[1].getDOMNode().checked).toBe(true);
expect(inputs.change).toBeCalled(); //Fails
expect(inputs.change.mock.calls.length).toBe(1); //Fails too
});
});
我想测试单选按钮值的变化。
提前致谢。
尝试查找输入,如果输入不存在return空数组,一个模块作为参数,但它需要反应元素。
var inputs = TestUtils.scryRenderedDOMComponentsWithClass(MySignUpForm, 'myRadio');
你是怎么发明的?
inputs.change = jest.genMockFunction();
首先 - 你需要渲染组件到 DOM 或者可能使用浅渲染,阅读更多关于它的信息,开玩笑有很好的文档
const mySignUpFormComponent = TestUtils.renderIntoDocument(<MySignUpForm />);
何时可以找到 react 元素的
var inputs = TestUtils.scryRenderedDOMComponentsWithClass(MySignUpForm, 'myRadio');
而且只有你可以将事件分派给这个元素
这方面的单元测试开玩笑
同时阅读更多关于 React 的内容,永远不要做那样的事情
var Gender;
onRequiredGender: function (e) {
Gender= e.currentTarget.value
},
在 React 中你必须只有状态和道具
应该喜欢
var MySignUpForm = React.createClass ({
constructor: function () {
super(props);
this.state = {
gender: false
}
}
onRequiredGender: function (e) {
this.setState({
gender: e.target.value
})
},
如果这个例子没有解决,请阅读更多关于 React 的内容,然后再试一次。
小提示
<input onChange={ this.onRequiredGender.bind(this) }/>
在 google 中搜索为什么你应该这样做
我是 React 和 Jest 的新手,我发现很难为以下代码编写单元测试。
我的 React 代码运行良好,但我无法弄清楚测试一部分。我试着查看了几个类似的帖子,但仍然无法找到正确的答案。
这是我的 React 组件 (MySignUpForm.js):
var React = require('react');
var ReactDOM = require('react-dom');
var profileFor;
var Gender;
var MySignUpForm = React.createClass ({
onRequiredGender: function (e) {
Gender= e.currentTarget.value
},
render : function() {
return (
<div className="col-sm-6 col-xs-6 r_pad_0">
<input className="myRadio" type="radio" name="gender" value="Male" onChange={this.onRequiredGender}/>
<span className="l_pad_5">Male</span>
</div>
<div className="col-sm-6 col-xs-6 r_pad_0">
<input className="myRadio" type="radio" name="gender" value="Female" onChange={this.onRequiredGender}/>
<span className="l_pad_5">Female</span>
</div>
)
},
});
module.exports = MySignUpForm;
我的笑话文件位于 tests 文件夹 (MySignUpFormTest.js):
jest.unmock('../MySignUpForm');
//import React from 'react';
import ReactDOM from 'react-dom';
import TestUtils from 'react-addons-test-utils';
import MySignUpForm from '../MySignUpForm';
describe('MySignUpForm', () => {
it("changes the checked state when clicked", () => {
var inputs = TestUtils.scryRenderedDOMComponentsWithClass(MySignUpForm, 'myRadio');
inputs.change = jest.genMockFunction();
expect(inputs[0].getDOMNode().checked).toBe(false);
TestUtils.Simulate.change(inputs[1], {target: {value: 'Female'}});
expect(inputs[0].getDOMNode().checked).toBe(false);
expect(inputs[1].getDOMNode().checked).toBe(true);
expect(inputs.change).toBeCalled(); //Fails
expect(inputs.change.mock.calls.length).toBe(1); //Fails too
});
});
我想测试单选按钮值的变化。
提前致谢。
尝试查找输入,如果输入不存在return空数组,一个模块作为参数,但它需要反应元素。
var inputs = TestUtils.scryRenderedDOMComponentsWithClass(MySignUpForm, 'myRadio');
你是怎么发明的?
inputs.change = jest.genMockFunction();
首先 - 你需要渲染组件到 DOM 或者可能使用浅渲染,阅读更多关于它的信息,开玩笑有很好的文档
const mySignUpFormComponent = TestUtils.renderIntoDocument(<MySignUpForm />);
何时可以找到 react 元素的
var inputs = TestUtils.scryRenderedDOMComponentsWithClass(MySignUpForm, 'myRadio');
而且只有你可以将事件分派给这个元素
这方面的单元测试开玩笑
同时阅读更多关于 React 的内容,永远不要做那样的事情
var Gender;
onRequiredGender: function (e) {
Gender= e.currentTarget.value
},
在 React 中你必须只有状态和道具
应该喜欢
var MySignUpForm = React.createClass ({
constructor: function () {
super(props);
this.state = {
gender: false
}
}
onRequiredGender: function (e) {
this.setState({
gender: e.target.value
})
},
如果这个例子没有解决,请阅读更多关于 React 的内容,然后再试一次。
小提示
<input onChange={ this.onRequiredGender.bind(this) }/>
在 google 中搜索为什么你应该这样做