2012-04-18 90 views
0

我對我目前的骨幹羣體之一寫茉莉花測試時真正得到一個惱人的錯誤,我認爲這不是我寫的測試,而不是做一些錯誤的,我javascript和茉莉的方式想告訴我那個。但我找不到解決方案。茉莉花測試骨幹,範圍界定麻煩

我得到了下面的簡化代碼,這將導致我們的問題

class Stuff extends Backbone.Collection 
    search: (str) -> 
     @trigger('search', @_filter(@_convertStrToArray(str))) 

    _convertStrToArray: (str) -> 
     str.toLowerCase().split() 

    _filter: (str_array) -> 
     @filter (stuff) -> 
      for _sub in str_array 
       ... do something here 

我想用茉莉花來測試,如果@_convertStrToArray方法被調用上執行@search。我得到了下面的測試(@stuff已在beforeEach聲明已成功創建!)

... 
it "should call _convertStrToArray", -> 
    spyOn(@stuff, '_convertStrToArray') 
    @stuff.search('cool stuff') 
    expect(@stuff._convertStrToArray).toHaveBeenCalled() 
... 

我在我的茉莉花測試收到以下錯誤現在..

TypeError: Cannot read property 'length' of undefined 

通過跟蹤堆棧跟蹤我發現錯誤來自以下行:

for _sub in str_array 

很明顯,這裏有一個範圍問題,我無法解決。該@filter方法在_filter方法來源於骨幹。這個腳本工作得很好,我只是在測試中遇到麻煩。

我的問題:我如何才能獲得正確的上str_array變量訪問@filter打電話?

回答

1

的問題是你的間諜。所述for _sub in str_array是使用索引/長度檢查迭代,但在_convertStrToArray的窺探不返回任何值。

您需要添加.andCallThrough()到您的間諜定義的末尾:

spyOn(@stuff, '_convertStrToArray').andCallThrough()

這將刺探的方法,但還是把實際的方法,它的返回值,以便您的代碼不會當它嘗試使用結果時失敗。

+0

感謝您的幫助很大,這是它! – pabera 2012-04-18 14:07:12