2012-02-22 25 views
7

我正在嘗試爲Backbone Todos集合編寫一個簡單規範,該集合存根骨幹Todo模型。Backbone jasmine sinon.stub typeError

這裏是我的規格:

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 =新TodoApp.Models.Todo()好好嘗試給予一個錯誤。

這是一個範圍界定問題嗎?有人能指出我正確的方向嗎?

回答

8

我也遇到過這個問題。你應該這樣稱呼它...

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

+0

這也解決了我的問題,謝謝! – smek 2012-05-10 14:44:55

+0

爲我完美工作,歡呼聲。 – 2012-11-06 14:05:19

1

您使用的語法sinon.stub window, 'TodoApp.Models.Todo'將用於包裝window['TodoApp.Models.Todo']作爲函數。 http://sinonjs.org/docs/#stubs

對於sinon,您更有可能將Todo模型上的某個特定功能打包爲存根:sinon.stub TodoApp.Models.Todo, 'Foo'

Sinon can stub an entire object但我認爲它的設計更精細。

+0

喜埃裏克,感謝您的回答。我試圖對待辦事項模型進行存根,以便我可以孤立地測試待辦事項集合。我正在關注http://tinnedfruit.com/2011/03/25/testing-backbone-apps-with-jasmine-sinon-2.html上的示例,其中指出您可以像這樣對模型構造函數進行存根。 – smek 2012-02-22 21:07:19

+0

@smek你有沒有將你的'''Todo'''模型附加到''''window''',類似於這個:http://stackoverflow.com/questions/4214731/coffeescript-global-variables? – 2012-02-23 16:45:04

+0

@Erick我已經定義了我的模型:class window.TodoApp.Models.Todo extends Backbone.Model – smek 2012-02-24 09:08:49

相關問題