在为我当前的一个主干集合编写 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 变量的访问权限?