2015-07-13 61 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'。 –

相關問題