現在のバックボーン コレクションの 1 つに対して jasmine テストを作成しているときに、本当に迷惑なエラーが発生しました。javascript で何か間違ったことをするのではなく、テストを作成する方法ではないと思います。jasmine はそれを教えてくれます。しかし、私は解決策を見つけることができません。
問題につながる次の単純化されたコードを取得しました
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
@search の実行時に @_convertStrToArray メソッドが呼び出された場合、ジャスミンでテストしたいと思います。次のテストを取得しました (@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メソッドは Backbone から来ています。スクリプトはまったく問題なく動作しますが、テストで問題が発生しています。
私の質問: @filter 呼び出しで str_array 変数に正しくアクセスするにはどうすればよいですか?