0

我有一个组件,其方法绑定到onChange其子组件的事件。简而言之:

DOM = React.DOM

Range = React.createClass
  getInitialState: ->
    isRange: false

  render: ->
    check = DOM.input
      type: "checkbox",
      onChange: @rangeChanged,
      checked: @state.isRange
      name: "isRange"
    DOM.form {}, [check]

  rangeChanged: React.autoBind ->
    @setState
      isRange: !@state.isRange

在测试期间,我想更改复选框的值并触发change事件。我的测试看起来像(使用 mocha.js + expect.js):

root = $("#root")

describe "test Range", ->
  beforeEach ->
    @range = Range()
    React.renderComponent(@range, root[0])

  afterEach ->
    React.unmountAndReleaseReactRootNode(root[0])

  it "should run event", (done) ->
    r = root.find("input[name=isRange]").prop("checked", true).trigger('change')
    setTimeout (=> expect(@range.state.isRange).to.be.true; done()), 10

不幸的是,我无法获得任何解决方案来使该测试正常工作。知道如何使它工作吗?

jsfiddle 片段

4

1 回答 1

0

把它放在那里,让每个人都可以看到。

需要复选框更改事件以响应以编程方式完成的选中状态更改

基本上,问题在于 jQuery 使用trigger('click')而不是change实际更改复选框的状态。change在这种情况下,就像您不想要的另一个自定义事件一样。

于 2013-07-09T04:41:48.613 回答