相关疑难解决方法(0)

使用Jest测试React Component函数

原版的

首先,我遵循Flux架构.

我有一个指示器显示几秒钟,例如:30秒.每一秒它显示1秒减少,所以29,28,27直到0.当到达0时,我清除间隔,使其停止重复.而且,我触发了一个动作.调度此操作后,我的商店会通知我.因此,当发生这种情况时,我将间隔重置为30秒,依此类推.组件看起来像:

var Indicator = React.createClass({

  mixins: [SetIntervalMixin],

  getInitialState: function(){
    return{
      elapsed: this.props.rate
    };
  },

  getDefaultProps: function() {
    return {
      rate: 30
    };
  },

  propTypes: {
    rate: React.PropTypes.number.isRequired
  },

  componentDidMount: function() {
    MyStore.addChangeListener(this._onChange);
  },

  componentWillUnmount: function() {
    MyStore.removeChangeListener(this._onChange);
  },

  refresh: function(){
    this.setState({elapsed: this.state.elapsed-1})

    if(this.state.elapsed == 0){
      this.clearInterval();
      TriggerAnAction();
    }
  },

  render: function() {
    return (
      <p>{this.state.elapsed}s</p>
    );
  },

  /**
   * Event handler for 'change' events coming from MyStore
   */
  _onChange: function() {
    this.setState({elapsed: this.props.rate}
    this.setInterval(this.refresh, 1000);
  } …
Run Code Online (Sandbox Code Playgroud)

javascript reactjs reactjs-flux jestjs

32
推荐指数
2
解决办法
3万
查看次数

使用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
查看次数