首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Sinon + Backbone规范在Jasmine Headless Webkit下失败,但在独立的Jasmine下通过

Sinon + Backbone规范在Jasmine Headless Webkit下失败,但在独立的Jasmine下通过
EN

Stack Overflow用户
提问于 2012-05-10 23:39:24
回答 1查看 577关注 0票数 6

我有一个Backbone收集规范(当然是todos),它使用Sinon用fixture数据伪造服务器响应。这通过了独立的Jasmine,但在我的Jasmine Headless Webkit设置下失败了。

失败的原因是:

代码语言:javascript
复制
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和我的fixture正确地返回了一个带有2个待办事项的假reposonse,但是集合中没有任何待办事项被解析。

有一个小提琴展示了所有这一切在Jasmine独立here上的工作

我的Jasmine Headless Webkit加载顺序如下:

代码语言:javascript
复制
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

以及代码(当然也在小提琴中):

代码语言:javascript
复制
# 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

有几个工具对我来说是新的,所以我真的很感谢大家的帮助--谢谢!

EN

回答 1

Stack Overflow用户

发布于 2013-07-12 13:32:58

也许在server.respond()中发生了一些异步的事情。你试过这个吗?

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10537539

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档