2015-09-05 83 views
2

我有一個反應的組分。我想測試它們。但是每次嘗試findRenderedDOMComponentWithTag以及經過測試的組件時,我都會收到意想不到的錯誤。這裏是噶錯誤日誌:reactjs得到'undefined是不是在測試一個function`茉莉

05 09 2015 20:31:23.450:INFO [watcher]: Changed file "/tmp/35ffb917aab483a567d1be6fed779291.browserify". 
PhantomJS 2.0.0 (Linux 0.0.0) DestroySession should process user logout FAILED 
    TypeError: undefined is not a function (evaluating 'target.dispatchEvent(e)') in http://localhost:9876/karma.js (line 1134) 
     at /tmp/35ffb917aab483a567d1be6fed779291.browserify:59730:16 
PhantomJS 2.0.0 (Linux 0.0.0): Executed 3 of 7 (1 FAILED) (skipped 4) (0.04 secs/0.019 secs) 

我的堆棧:

  • 的CoffeeScript
  • 反應(+ JSX)
  • browserify
  • karma.js
  • phantomjs
  • 茉莉花

組件:

React = require('react') 
ReactBootstrap = require('react-bootstrap') 

Button = ReactBootstrap.Button 

SessionActions = require('../../actions/session_actions.coffee') 

module.exports = React.createClass 
    contextTypes: router: React.PropTypes.func 
    handleClick: (e) -> 
    e.preventDefault() 
    console.log 'хуйло' 
    SessionActions.destroy() 
    @context.router.transitionTo('/sessions/new') 
    render: -> 
    <Button onClick={@handleClick} className='btn btn-default navbar-btn'>Sign out</Button> 

測試:

React = require('react/react-with-addons.js') 
TestUtils = React.addons.TestUtils 

DestroySession = require('../../../../app/coffee/components/sessions/destroy.coffee') 

describe 'DestroySession', -> 
    instance = undefined 

    beforeEach -> 
    instance = TestUtils.renderIntoDocument(<DestroySession />) 


    it 'should process user logout', -> 
    localStorage.setItem('token', 123) 
    localStorage.setItem('userName', 'Anonymous Person') 
    localStorage.setItem('userId', 11) 

    button = TestUtils.findRenderedDOMComponentWithTag(instance, 'button') 

    console.log button 

這很奇怪,但我得到一個錯誤,當我嘗試console.log我的按鈕變量。如果我註釋掉我的測試的最後一行,它會通過。發生了什麼?

+0

我認爲這是很好:我可以評估和測試針對實例成功,但如果我推實例'console.log',我得到相同確切的錯誤。 – XML

回答

0

需要調用getDOMNode()

console.log button.getDOMNode()

注意:這是在0.14.2改變其中TestUtils.find /占卜方法將直接返回DOM節點。

0

這可能不是正確的答案,但我在這裏登陸,因爲我得到了茉莉花完全相同的例外,我發現什麼原因引起的,所以在這裏我要離開這個:

我犯的錯誤是意外地拯救全球文檔對象內,而不是一個局部變量叫文件

/* 
var document = { 
    parentId: parentItem._id, 
    childIds: [childItem._id], 
}; 
I had moved the above elsewhere, so "document" now refers to window.document 
*/ 
db.saveInIndex(parentId, document); 

後來又對此做出了一個電話:

console.log(db.getFromIndex(parentId)); 

這就造成了這一點:

TypeError: undefined is not a function (evaluating 'target.dispatchEvent(e)') 

因爲它試圖記錄看起來像這樣的對象:

{ 
    parentId: 'HA89A8S98A98', 
    document: <<< the global "document" - not what we wanted! >>> 
} 

也就是說全局變量文件通常會的HTML內容的頁面,但是當你對PhantomJS進行測試時,你會得到它自己的解釋!

(運行噶針對Chrome瀏覽器給了一個不同的異常)