2013-07-09 4 views
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: [email protected] 

Во время теста я хочу, чтобы изменить значение флажка и вызвать 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 snippet

ответ

0

Сведя там так, чтобы каждый мог видеть.

Need checkbox change event to respond to change of checked state done programmatically

В основном, проблема заключается в том, что JQuery использует trigger('click'), а не change на самом деле изменить состояние CheckBox в. change в этом случае просто как другое пользовательское событие, которое вы не хотите.

Смежные вопросы