2014-11-01 94 views
4

我正在使用React測試任何事情,令人難以置信的困難。 TestUtils上的文檔很少,沒有例子。谷歌似乎只給我幾個結果。我正在使用茉莉花,但那​​不是真正讓我悲傷的部分。如何在單元測試中訪問React中的方法

下面是我嘗試過測試的最簡單的事情:

var BigButton = React.createClass({ 
    render: function() { 
    return (
     <button className="big-submit" data-color={this.props.color} onClick={this.props.action}>{this.props.text}</button> 
    ); 
    }, 
    foo: function() {}, 
    bar: function() { 
    this.foo(); 
    } 
}); 

我有

describe('BigButton', function() { 
    describe('render', function() { 
    it('creates a button', function() { 
     var button = <BigButton />; 
     TestUtils.renderIntoDocument(button); 
     debugger; 
    }); 
    }); 
}); 

我的問題一個試驗是怎麼做的我從外部訪問的任何有意義的陣營類?我怎樣才能檢查render是否返回一個按鈕的HTML元素?我知道如何使用測試間諜,但我怎麼才能找到方法foo窺探,我該如何撥打bar?一切似乎都以某種完全不可測的方式結束了。

回答

4

我不知道你是否知道,但Facebook寫道它在茉莉花建自己的測試庫:https://facebook.github.io/jest

他們有一個教程測試反應在這裏:https://facebook.github.io/jest/docs/tutorial-react.html

我覺得這是一個即使你不想使用笑話,如何使用TestUtils也是一個很好的例子。其要點是:

  • renderIntoDocument()返回
  • 您使用傭工像findRenderedDOMComponentWithTag()一種超然的DOM節點的引用(見TestUtils)去子節點引用了您的組件的
  • 您可以使用getDOMNode()您斷言的
+1

謝謝,第一點讓我能夠測試事件和DOM道具,但我仍然不確定如何監視功能。茉莉花間諜活動似乎不正常。說它從來沒有叫,但肯定是被稱爲。我猜測它不使用傳遞給它的函數的同一個實例。像克隆它或其他東西... – 2014-11-02 00:01:22

+3

你有沒有找到一個答案來監視組件功能? – kjs3 2015-01-29 22:18:11

+2

也在尋找答案 – 2015-06-03 18:42:18

3

參考刺探方法,您呈現組件之前,您可以訪問這些方法通過對象var methods = ComponentName.prototype.__reactAutoBindMap

然後(茉莉花),你可以說: var methodSpy = spyOn(methods, 'methodName').and.callThrough()

那麼你就可以呈現組件: widget = TestUtils.renderIntoDocument(React.createElement(ComponentName, params))

相關問題