【问题标题】:Backbone jasmine sinon.stub typeErrorBackbone 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() 不会给出错误。

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

【问题讨论】:

    标签: backbone.js coffeescript jasmine sprockets sinon


    【解决方案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,类似于:stackoverflow.com/questions/4214731/…
      • @Erick 我已经定义了我的模型:class window.TodoApp.Models.Todo extends Backbone.Model
      • @EricBock 我有类似的要求,即使用 SinonJS 存根整个 BackBone 模型对象。您发布的链接(存根整个对象)似乎不起作用。是否还有其他相同的示例链接,我尝试了tinnedfruit.com/2011/03/25/… 教程,但收到诸如“尝试将未定义的属性 Todo 包装为函数”之类的错误
      猜你喜欢
      • 2016-06-20
      • 2012-06-27
      • 2015-02-15
      • 2012-06-25
      • 2012-04-29
      • 2014-01-25
      • 2014-07-16
      • 1970-01-01
      • 2012-05-19
      相关资源
      最近更新 更多