标签: reactjs-testutils

如何通过Jest测试React PropTypes?

我正在为我的React代码编写Jest测试,并希望使用/测试PropType检查.我对Javascript世界很陌生.我正在使用npm进行安装react-0.11.2并有一个简单的:

var React = require('react/addons');
Run Code Online (Sandbox Code Playgroud)

在我的测试中.我的测试看起来非常类似于jest/react教程示例,其代码如下:

var eventCell = TestUtils.renderIntoDocument(
  <EventCell
    slot={slot}
    weekId={weekId}
    day={day}
    eventTypes={eventTypes}
    />
);

var time = TestUtils.findRenderedDOMComponentWithClass(eventCell, 'time');
expect(time.getDOMNode().textContent).toEqual('19:00 ');
Run Code Online (Sandbox Code Playgroud)

但是,似乎EventCell没有触发组件中的PropType检查.我知道检查只在开发模式下运行,但后来我也认为react通过npm给你开发版本.当我使用watchify构建组件时,检查会在浏览器中触发.

我错过了什么?

reactjs jestjs reactjs-testutils react-proptypes

29
推荐指数
4
解决办法
2万
查看次数

在基于jsdom的测试中调用setState导致"无法在工作线程中呈现标记"错误

我正在使用我自己的小"虚拟浏览器"实用程序jsdom下测试我的React组件.工作得很好,直到我努力setState.例如,在测试儿童年龄输入控制时:

describe('rendering according to the draft value', function () {
    var component;

    beforeEach(function () {
        component = TestUtils.renderIntoDocument(
            React.createElement(ChildrenInput, {value: []})
        );

        component.setState({draft: [{age: null}, {age: null}]}, done);
    });

    it('overrides the value property for the count', function () {
        assert.strictEqual(component.refs.count.props.value, 2);
    });

    it('overrides the value property for the ages', function () {
        assert.strictEqual(component.refs.age1.props.value, null);
    });
});
Run Code Online (Sandbox Code Playgroud)

...... setState我在线上:

未捕获错误:不变违规:dangerouslyRenderMarkup(...):无法在工作线程中呈现标记.确保windowdocument提供需要的时候进行单元测试或使用React.renderToString服务器渲染才反应过来全局.

我知道window并且document全局变量确实是由基于jsdom设置的TestBrowser,就像那样:

global.document …
Run Code Online (Sandbox Code Playgroud)

testing node.js jsdom reactjs reactjs-testutils

20
推荐指数
2
解决办法
3869
查看次数

使用reactJs TestUtils模拟文本输入

我希望能够使用reactjs模拟用户在文本框中键入内容,以便我可以测试我的验证状态消息.

我有一个在keyUp上验证的react组件

以下是我尝试过的一个简单示例.

nameInput.props.value = 'a';
React.addons.TestUtils.Simulate.keyUp(nameInput);
React.addons.TestUtils.findRenderedDOMComponentWithClass(component, 'has-error');
Run Code Online (Sandbox Code Playgroud)

当我在验证器中调试时,这似乎不会更改绑定文本框的值

React.addons.TestUtils.Simulate.keyUp(nameInput, {key: 'a'});
React.addons.TestUtils.findRenderedDOMComponentWithClass(component, 'has-error');
Run Code Online (Sandbox Code Playgroud)

这也不是.

有人能指出我在正确的轨道上,第二个内容是我可以在模拟(http://facebook.github.io/react/docs/test-utils.html)周围找到的文档,第一个对我有意义(设置实际的文本框值,然后伪造一个事件)

javascript unit-testing reactjs reactjs-testutils

14
推荐指数
1
解决办法
8069
查看次数

测试React Select组件

https://github.com/JedWatson/react-select

我想使用React-Select react组件,但我需要添加测试.

我已经尝试了谷歌发现的几个选项,但似乎没有任何效果.我有下面的代码,但它不会导致更改事件.我已经能够添加一个焦点事件,它增加了'is-focusedsed'类,但'is-open'类仍然缺失.

我用过:https://github.com/JedWatson/react-select/blob/master/test/Select-test.js作为参考

我曾尝试仅在输入字段上使用更改事件,但这也没有帮助.我注意到有一个onInputChange={this.change}选择.

测试

import Home from '../../src/components/home';
import { mount } from 'enzyme'

describe('Home', () => {

it("renders home", () => {

    const component = mount(<Home/>);

    // default class on .Select div
    // "Select foobar Select--single is-searchable"

    const select = component.find('.Select');

    // After focus event
    // "Select foobar Select--single is-searchable is-focussed"
    // missing is-open
    TestUtils.Simulate.focus(select.find('input'));

    //this is not working
    TestUtils.Simulate.keyDown(select.find('.Select-control'), { keyCode: 40, key: 'ArrowDown' });
    TestUtils.Simulate.keyDown(select.find('.Select-control'), { keyCode: 13, …
Run Code Online (Sandbox Code Playgroud)

testing mocha.js reactjs reactjs-testutils react-select

14
推荐指数
5
解决办法
1万
查看次数

使用Jest和React JS TestUtils测试表单

我有一个带有3个单选按钮的表单,如下(假名):

<form className="myForm" onSubmit={this.done}>
  <input className="myRadio" checked={?rue} type="radio" name="myRadio" onChange={this.change} value="value1"
  <input className="myRadio" type="radio" name="myRadio" onChange={this.change} value="value2"
  <input className="myRadio" type="radio" name="myRadio" onChange={this.change} value="value3"
<input type="submit" className="submit" />
</form>
Run Code Online (Sandbox Code Playgroud)

我正在努力测试onChange和onSubmit事件.

inputs = TestUtils.scryRenderedDOMComponentsWithClass(MyComponentRendered, 'myRadio');
myForm = TestUtils.findRenderedDOMComponentWithClass(MyComponentRendered, 'myForm');
Run Code Online (Sandbox Code Playgroud)

我有一个测试:

it("changes the checked state when clicked", function() {
  MyComponent.change = jest.genMockFunction();

  expect(inputs[0].getDOMNode().checked).toBe(true);
  TestUtils.Simulate.change(inputs[1], {target: {value: 'value2'}});
  expect(inputs[0].getDOMNode().checked).toBe(false);
  expect(inputs[1].getDOMNode().checked).toBe(true);
  expect(inputs[2].getDOMNode().checked).toBe(false);

  expect(MyComponent.change).toBeCalled(); //Fails
  expect(MyComponent.change.mock.calls.length).toBe(1); //Fails too
});
Run Code Online (Sandbox Code Playgroud)

除了应该调用的函数(MyComponent.change)之外,它是有效的,但它不是.

我对onSubmit也有一个测试:

it("saves on submit", function()
  MyComponent.done = jest.genMockFunction();
  MyComponent.insideDone = jest.genMockFunction();
  TestUtils.Simulate.submit(myForm);
  expect(MyComponent.done).toBeCalled(); //Fails
  expect(MyComponent.insideDone).toBeCalled(); //Success …
Run Code Online (Sandbox Code Playgroud)

javascript reactjs jestjs reactjs-testutils

12
推荐指数
1
解决办法
4897
查看次数

使用React TestUtils Simulate选择选项

我有以下React组件,我想在我的select-block中选择一个带有TestUtils的selectElements.我怎么做?

var selectElements = ["type_a", "type_b"];

var SelectElement = React.createClass({
  render: function() {
    return (
      <option value={this.props.type}>{this.props.type}</option>
      );
  }
});

var MyForm = React.createClass({
  handleSubmit: function(e) {
    console.log("submitted");
  },
  render: function () {
    var selectElements = this.props.availableTypes.map(function (type) {
      return (
        <SelectElement key={type} type={type} />
        );
    });
    return (
      <form role="form" onSubmit={this.handleSubmit}>
        <select ref="type" name="type">
          <option value="">-- Choose --</option>
          {selectElements}
        </select>
        <input type="submit" value="Search"/>
      </form>
      );
  }
});
Run Code Online (Sandbox Code Playgroud)

我已经尝试过这样做了:

var myFormComponent = TestUtils.renderIntoDocument(<MyForm selectElements={selectElements} />);
var form = TestUtils.findRenderedDOMComponentWithTag(myFormComponent, 'form'); …
Run Code Online (Sandbox Code Playgroud)

reactjs reactjs-testutils

12
推荐指数
1
解决办法
7562
查看次数

在React TestUtils中模拟文件输入

我有一个具有以下渲染效果的组件:

  render: function() {
   <input
    type="file"
    name: this.props.name,
    className={this.props.className}
    onChange={this.props.handleChange}
    accept={this.props.accept}/>
 }
Run Code Online (Sandbox Code Playgroud)

State由一个容器管理,该容器使用jquery AJAX调用上传文件服务器端:

 getInitialState: function() {
   return {
     uploaded: false
  };
}

handleChange: function(event) {
event.preventDefault();

var file = event.target.files[0];
if (!file) {
  return;
}

var reader = new FileReader();
reader.readAsText(file, 'UTF-8');
var self = this;

reader.onload = function(e) {
  var content = e.target.result;

 var a =  $.ajax({
    type: 'PUT',
    url: 'http://localhost:8080/upload',
    contentType: 'application/json',
    dataType: "json",
    data: JSON.stringify({
      "input": content
    })
  })
  .fail(function(jqXHR, textStatus, errorThrown) {
    console.log("ERROR WHEN UPLOADING"); …
Run Code Online (Sandbox Code Playgroud)

unit-testing mocha.js fs reactjs reactjs-testutils

12
推荐指数
1
解决办法
1451
查看次数

为什么不在dispatchEvent上调用React事件处理程序?

考虑React组件中的以下输入元素:

<input onChange={() => console.log('onChange')} ... />
Run Code Online (Sandbox Code Playgroud)

在测试React组件时,我正在模拟用户更改输入值:

input.value = newValue;
TestUtils.Simulate.change(input);
Run Code Online (Sandbox Code Playgroud)

这会导致'onChange'按预期记录.

但是,当'change'直接调度事件时(我正在使用jsdom):

input.value = newValue;
input.dispatchEvent(new Event('change'));
Run Code Online (Sandbox Code Playgroud)

onChange处理器不叫.

为什么?

我使用的动机dispatchEvent不是TestUtils.Simulate因为TestUtils.Simulate不支持事件冒泡而且我的组件的行为依赖于此.我想知道是否有办法测试事件没有TestUtils.Simulate

reactjs reactjs-testutils

12
推荐指数
2
解决办法
8571
查看次数

错误:不变违规:findAllInRenderedTree(...):实例必须是复合组件

在JEST for React文件中编写测试用例时,我收到此错误.以下是我的示例代码:

search_basr_test.js

jest.autoMockOff();
global.React = require('react/addons');
jest.setMock('../stores/browser_store.jsx');
beforeEach(function() {
    var search_bar = require('../components/search_bar.jsx');
});
var TestUtils = React.addons.TestUtils;

describe("Test", function() {
    it("should render Test", function() {
            var test = TestUtils.renderIntoDocument(<search_bar/>);
            expect(test).toBeDefined();
    });
    it("renders a list in a box with proper CSS classes", function() {
            var test = TestUtils.renderIntoDocument(<search_bar/>);
            let box = TestUtils.findRenderedDOMComponentWithTag(test, "div");
            expect(box.className).toEqual("sidebar__collapse");
    });
});
Run Code Online (Sandbox Code Playgroud)

search_bar.jsx

return (
        <div>
            <div
                className='sidebar__collapse'
                onClick={this.handleClose}
            >
                <span className='fa fa-angle-left'></span>
            </div>
            <span
                className='search__clear'
                onClick={this.clearFocus}
            >
                {'Cancel'}
            </span>
}
Run Code Online (Sandbox Code Playgroud)

有谁在那里帮我解决这个问题?

reactjs jestjs reactjs-testutils

11
推荐指数
2
解决办法
2680
查看次数

使用Jest更改元素大小

我的组件中有以下代码

var rect = ReactDOM.findDOMNode(this).getBoundingClientRect();
Run Code Online (Sandbox Code Playgroud)

我在组件中使用d3js并渲染图形.但是当我运行测试时,有任何svg标签.我认为它发生是因为所有rect的字段等于0.

这是浏览器中console.log(rect)的输出:

ClientRect {top:89,right:808,bottom:689,left:8,width:800 ...}

当我运行测试时:

{bottom:0,height:0,left:0,right:0,top:0,width:0}

那么有没有办法设置元素的大小?

reactjs jestjs reactjs-testutils

10
推荐指数
1
解决办法
6364
查看次数