2015-07-13 63 views
6

我刚刚将我的项目的React版本升级到13.3,setProps()不再有效。我在这个摩卡测试中使用它,我不知道现在如何重写它。我有什么选择?React.js中废弃的setProps()的替代方案是什么?

it('reloads search results when props change ', function() { 
    var loadResultsSpy = sinon.spy(searchView, 'loadSearchResults'); 
    var newProps = {searchBy: 'foo', searchTerm: 'bar'}; 
    searchView.setProps(newProps); 
    expect(loadResultsSpy.calledWith(newProps.searchBy, newProps.searchTerm)).toBe(true); 
    }); 

回答

6

在最一般的情况下,建议作出反应只是重新撕心裂肺的顶级组件,它本质上只是更新了道具,如果新的渲染是相同的组件类型的。由于TestUtils.renderIntoDocument简直是creating a DOM node and doing a regular render into it一个快捷方式,这样的事情就可以了(我正在做对你的测试的设置一些假设):

var searchView, div; 

beforeEach(function() { 
    var comp = <SearchView searchBy="baz" searchTerm="quix" />; 
    div = document.createElement('div'); 
    searchView = React.render(comp, div); 
}); 

it('reloads search results when props change', function() { 
    var loadResultsSpy = sinon.spy(searchView, 'loadSearchResults'); 
    var comp = <SearchView searchBy="foo" searchTerm="bar" />; 
    React.render(comp, div); 
    expect(loadResultsSpy.calledWith("foo", "bar")).toBe(true); 
}); 
+1

感谢。在较新版本的React中,需要'ReactDOM.render'而不是'React.render'。 –

相关问题