Backbone jasmine sinon.stub typeError

Posted

技术标签:

【中文标题】Backbone jasmine sinon.stub typeError【英文标题】: 【发布时间】:2012-03-12 17:05:06 【问题描述】:

我正在尝试为 Backbone Todos 集合编写一个简单的规范,以存根 Backbone Todo 模型。

这是我的规格:

describe "TodoApp.Collections.Todos", ->

  beforeEach ->
    @todoStub = sinon.stub window, 'TodoApp.Models.Todo'

  afterEach ->
    @todoStub.restore()

这给了我以下错误:

TypeError: Attempted to wrap undefined property TodoApp.Models.Todo as function

Todo 模型定义为 todo = new TodoApp.Models.Todo() 不会给出错误。

这是一个范围问题吗?有人能指出我正确的方向吗?

【问题讨论】:

【参考方案1】:

我也遇到了这个问题。你应该这样称呼它......

    beforeEach ->
            @todoStub = sinon.stub window.TodoApp.Models, 'Todo'

而不是这个。

    beforeEach ->
            @todoStub = sinon.stub window, 'TodoApp.Models.Todo'

这解决了我的问题

@smek:这也解决了http://tinnedfruit.com/2011/03/25/testing-backbone-apps-with-jasmine-sinon-2.html的问题

【讨论】:

【参考方案2】:

您使用的语法 sinon.stub window, 'TodoApp.Models.Todo' 将用于将 window['TodoApp.Models.Todo'] 包装为一个函数。 http://sinonjs.org/docs/#stubs

使用 sinon,您更有可能在 Todo 模型上使用存根包装特定函数:sinon.stub TodoApp.Models.Todo, 'Foo'

诗乃可以stub an entire object,但我认为它的设计更精细。

【讨论】:

您好,埃里克,感谢您的回答。我正在尝试对 todo 模型进行存根,以便可以单独测试 todos 集合。我正在关注tinnedfruit.com/2011/03/25/… 上的示例,您可以像这样对模型构造函数进行存根。 @smek 您是否将您的Todo 模型附加到window,类似于:***.com/questions/4214731/…? @Erick 我已经定义了我的模型:class window.TodoApp.Models.Todo extends Backbone.Model @EricBock 我有类似的要求,即使用 SinonJS 存根整个 BackBone 模型对象。您发布的链接(存根整个对象)似乎不起作用。是否还有其他相同的示例链接,我尝试了tinnedfruit.com/2011/03/25/… 教程,但收到诸如“尝试将未定义的属性 Todo 包装为函数”之类的错误

以上是关于Backbone jasmine sinon.stub typeError的主要内容,如果未能解决你的问题,请参考以下文章

web

前端大牛们都学过哪些?

Jasmine入门

jasmine初体验

karma-jasmine-html-reporter@1.1.0 需要 jasmine@>=3 的对等方,但没有安装。

jasmine:在 jasmine.DEFAULT_TIMEOUT_INTERVAL 指定的超时时间内未调用异步回调