2012-05-10 17 views
6

Tôi có một bộ sưu tập Backbone spec (todos, tất nhiên) sử dụng Sinon để giả đáp ứng máy chủ với dữ liệu lịch thi đấu. Điều này đi với Jasmine độc ​​lập nhưng thất bại trong thiết lập của tôi Jasmine Headless Webkit.Sinon + Backbone spec thất bại dưới Jasmine Headless Webkit nhưng đi qua với Jasmine độc ​​lập

Sự thất bại là thế này:

Todos collection when fetching models from the server should parse todos from the response. 

    Expected 0 to equal 2. (line ~58) 
    expect(this.todos.length).toEqual(this.fixture.response.todos.length); 

Sinon và vật cố của tôi trả lại đúng một reposonse giả với 2 todos, nhưng không có todos được phân tích trong bộ sưu tập.

Có một fiddle hiển thị tất cả những điều này làm việc với Jasmine độc ​​here

Jasmine Headless Webkit thứ tự nạp của tôi là như sau:

clyde:backbone-jasmine andy$ jasmine-headless-webkit -l 
/Users/andy/.rbenv/versions/1.9.3-p0/lib/ruby/gems/1.9.1/gems/jasmine-core-1.1.0/lib/jasmine-core/jasmine.js 
/Users/andy/.rbenv/versions/1.9.3-p0/lib/ruby/gems/1.9.1/gems/jasmine-core-1.1.0/lib/jasmine-core/jasmine-html.js 
/Users/andy/.rbenv/versions/1.9.3-p0/lib/ruby/gems/1.9.1/gems/jasmine-core-1.1.0/lib/jasmine-core/jasmine.css 
/Users/andy/.rbenv/versions/1.9.3-p0/lib/ruby/gems/1.9.1/gems/jasmine-headless-webkit-0.8.4/vendor/assets/javascripts/jasmine-extensions.js 
/Users/andy/.rbenv/versions/1.9.3-p0/lib/ruby/gems/1.9.1/gems/jasmine-headless-webkit-0.8.4/vendor/assets/javascripts/intense.js 
/Users/andy/.rbenv/versions/1.9.3-p0/lib/ruby/gems/1.9.1/gems/jasmine-headless-webkit-0.8.4/vendor/assets/javascripts/headless_reporter_result.js 
/Users/andy/.rbenv/versions/1.9.3-p0/lib/ruby/gems/1.9.1/gems/jasmine-headless-webkit-0.8.4/vendor/assets/javascripts/jasmine.HeadlessConsoleReporter.js 
/Users/andy/.rbenv/versions/1.9.3-p0/lib/ruby/gems/1.9.1/gems/jasmine-headless-webkit-0.8.4/vendor/assets/javascripts/jsDump.js 
/Users/andy/.rbenv/versions/1.9.3-p0/lib/ruby/gems/1.9.1/gems/jasmine-headless-webkit-0.8.4/vendor/assets/javascripts/beautify-html.js 
/Users/andy/.rbenv/versions/1.9.3-p0/lib/ruby/gems/1.9.1/gems/jquery-rails-2.0.2/vendor/assets/javascripts/jquery.js 
/Users/andy/.rbenv/versions/1.9.3-p0/lib/ruby/gems/1.9.1/gems/jquery-rails-2.0.2/vendor/assets/javascripts/jquery_ujs.js 
/Users/andy/.rbenv/versions/1.9.3-p0/lib/ruby/gems/1.9.1/gems/jasmine-core-1.1.0/lib/jasmine-core/json2.js 
/Users/andy/.rbenv/versions/1.9.3-p0/lib/ruby/gems/1.9.1/gems/backbone-rails-0.9.2/vendor/assets/javascripts/underscore.js 
/Users/andy/.rbenv/versions/1.9.3-p0/lib/ruby/gems/1.9.1/gems/backbone-rails-0.9.2/vendor/assets/javascripts/backbone.js 
/Users/andy/.rbenv/versions/1.9.3-p0/lib/ruby/gems/1.9.1/gems/backbone-rails-0.9.2/vendor/assets/javascripts/backbone-rails.js 
/Users/andy/Code/backbone-jasmine/app/assets/javascripts/app/collections/todos.js.coffee 
/Users/andy/Code/backbone-jasmine/app/assets/javascripts/app/models/todo.js.coffee 
/Users/andy/Code/backbone-jasmine/app/assets/javascripts/application.js 
/Users/andy/.rbenv/versions/1.9.3-p0/lib/ruby/gems/1.9.1/gems/jasmine-spec-extras-0.0.2/vendor/assets/javascripts/jasmine-jquery.js 
/Users/andy/.rbenv/versions/1.9.3-p0/lib/ruby/gems/1.9.1/gems/jasmine-spec-extras-0.0.2/vendor/assets/javascripts/sinon.js 
/Users/andy/.rbenv/versions/1.9.3-p0/lib/ruby/gems/1.9.1/gems/jasmine-spec-extras-0.0.2/vendor/assets/javascripts/jasmine-sinon.js 
/Users/andy/Code/backbone-jasmine/spec/javascripts/helpers/spec_helper.js.coffee 
/Users/andy/Code/backbone-jasmine/spec/javascripts/helpers/valid_response.js.coffee 
/Users/andy/Code/backbone-jasmine/spec/javascripts/fixtures/todos_fixture.js.coffee 
/Users/andy/Code/backbone-jasmine/spec/javascripts/app/models/todo_spec.js.coffee 
/Users/andy/Code/backbone-jasmine/spec/javascripts/app/collections/todos_spec.js.coffee 

Và mã (cũng trong fiddle tất nhiên):

# abbreviated todo model 
class window.Todo extends Backbone.Model 


# complete todos collection 
class window.Todos extends Backbone.Collection 
    model: window.Todo 
    url: "/todos" 
    comparator: (todo) -> 
    todo.get('priority') 
    parse: (res) -> 
    res.response.todos 


# spec/javascripts/fixtures/todos_fixture.js.coffee 
beforeEach -> 
    @fixtures = Todos: 
    valid: 
     status: "OK" 
     version: "1.0" 
     response: 
     todos: [ 
      id: 1 
      title: "Paint the fence" 
     , 
      id: 2 
      title: "Wash the dog" 
     ] 


# spec/javascripts/helpers/valid_response.js.coffee 
beforeEach -> 
    @validResponse = (responseText) -> 
    [ 200, "Content-Type": "application/json", 
     JSON.stringify responseText ] 


# abbreviated todo spec (full spec in fiddle) 
describe "Todos collection", -> 

    describe "when fetching models from the server", -> 
    beforeEach -> 
     @todo = sinon.stub(window, "Todo") 
     @todos = new Todos() 
     @fixture = @fixtures.Todos.valid 
     @server = sinon.fakeServer.create() 
     @server.respondWith "GET", "/todos", @validResponse(@fixture) 

    afterEach -> 
     @server.restore() 
     @todo.restore() 

    it "should parse todos from the response", -> 
     @todos.fetch() 
     @server.respond() 
     expect(@todos.length).toEqual @fixture.response.todos.length 
     expect(@todos.get(1).get('title')).toEqual @fixture.response.todos[0].title 

Một số công cụ được sử dụng là mới đối với tôi vì vậy tôi thực sự đánh giá cao sự trợ giúp nào-- cảm ơn !!

+0

fyi, tôi đã có thể tạo lại điều này. –

+0

Cảm ơn bạn đã xem xét điều này! Tôi đánh giá cao sự giúp đỡ của bạn. – Blastula

Trả lời

0

Có thể có điều gì đó không đồng bộ xảy ra trong server.respond(). Bạn đã thử cái này chưa?

it "should parse todos from the response", -> 
    @todos.fetch() 
    @server.respond() 
    waits 500 
    runs -> 
    expect(@todos.length).toEqual @fixture.response.todos.length 
    expect(@todos.get(1).get('title')).toEqual @fixture.response.todos[0].title 
Các vấn đề liên quan