繁体   English   中英

茉莉花测试骨干,划定麻烦

[英]Jasmine testing Backbone, Scoping trouble

在为我当前的主干集合之一编写茉莉花测试时,我确实遇到了一个烦人的错误,我认为这不是我编写测试的方式,而不是在我的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

如果要在执行@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变量的访问权限?

问题是你的间谍。 for _sub in str_arrayfor _sub in str_array使用索引/长度检查进行迭代,但是_convertStrToArray上的_convertStrToArray未返回任何值。

您需要在间谍定义的末尾添加.andCallThrough()

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

这将监视该方法,但仍会调用实际方法,并且它是返回值,以使您的代码在尝试使用结果时不会失败。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM