Я вижу ошибку, которая зависит только от местоположения линии:
should change(Relationship, :count).by(-1)
Например, с кодом:
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
Я получаю ошибку rspec:
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_controller_spec.rb:44:in `block (4 levels) in <top (required)>'
# ./spec/controllers/relationships_controller_spec.rb:43:in `block (3 levels) in <top (required)>'
Но с кодом:
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
... тест пройден.
Я вижу ожидаемое поведение при использовании веб-браузера. Отписываясь от пользователя корректирует итоги правильно.
Итак, эти два теста rspec не эквивалентны? Я ложно заверил, что второй тест проходит? Если они функционально эквивалентны, почему первый отказывает?