Неожиданное поведение rspec Ruby on Rails Turorial глава 12 - PullRequest
0 голосов
/ 18 марта 2011

Я вижу ошибку, которая зависит только от местоположения линии:

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 не эквивалентны? Я ложно заверил, что второй тест проходит? Если они функционально эквивалентны, почему первый отказывает?

1 Ответ

0 голосов
/ 21 марта 2011

Кажется, это было отчасти из-за того, что мы запутали

./app/controllers/relationships_controller.rb

с

./spec/controllers/relationships_controller_spec.rb

Код, вставленный в неправильный файл (соответственно), не вызвал синтаксических ошибок. Исправление моей ошибки привело к прохождению тестов rspec.

...