开发者

Unexpected rspec behavior Ruby on Rails Turorial chapter 12

I am seeing an error that is only dependent on the location of the line:

should change(Relationship, :count).by(-1)

For example, with the code:

it "should destroy a relationship using Ajax" do
  lambda do
    xhr :delete, :destroy, :id => @relationship
    response.should be_success
  end.should change(Relationship, :count).by(-1) #<<-line is here

I get the rspec error:

  1) RelationshipsController DELETE 'destroy' should destroy a relationship using Ajax
     Failure/Error: xhr :delete, :destroy, :id => @relationship
     ActionView::MissingTemplate:
       Missing template relationships/destroy with {:handlers=>[:erb, :rjs, :builder, :rhtml, :rxml], :formats=>[:js, :html], :locale=>[:en, :en]} in view paths "#<RSpec::Rails::ViewRendering::PathSetDelegatorResolver:0x00000100a5b5f8>"
     # ./app/controllers/relationships_controller.rb:16:in `destroy'
     # ./spec/controllers/relationships_contr开发者_JS百科oller_spec.rb:44:in `block (4 levels) in <top (required)>'
     # ./spec/controllers/relationships_controller_spec.rb:43:in `block (3 levels) in <top (required)>'

But with the code:

it "should destroy a relationship using Ajax" do
  lambda do
    xhr :delete, :destroy, :id => @relationship
    response.should be_success
    should change(Relationship, :count).by(-1) #<<-Line moved to here
  end

... the test passes.

I am seeing expected behavior when I use a web browser. Unfollowing a user adjusts totals correctly.

So, are these two rspec tests not equivalent? Am I falsely reassured that the second test passes? If they are functionally equivalent, why does the first one fail?


Seems this was due, in part, to having confused

./app/controllers/relationships_controller.rb

with

./spec/controllers/relationships_controller_spec.rb

Code pasted into the wrong file (appropriately) generated no syntax errors. Fixing my error lead to passing rspec tests.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜