Интеграционный тест Rspec: маршруты недоступны - PullRequest
0 голосов
/ 21 августа 2011

Я пытался написать интеграционное тестовое тестирование, если мой контроллер вызывает исключение ActiveRecord :: RecordNotFound для удаленных статей (которые просто помечены как удаленные):

it "should return 404 for deleted articles" do
  @article = Factory :article, :status => "deleted"
  expect { get edit_article_path(:id => @article.id) }.to raise_error(ActiveRecord::RecordNotFound)
end

Этот тип тестов работает нормальнов спецификации контроллера, но внутри спецификации / запросов я получаю эту ошибку:

expected ActiveRecord::RecordNotFound, got #<ActionController::RoutingError: No route matches {:action=>"edit", :controller=>"articles", :id=>595}>

Таким образом, он корректно просматривает мои маршруты (так как он знает контроллер и т. д.), но все равно вызывает ошибку.Почему это так?

Спасибо, Йоханнес

1 Ответ

5 голосов
/ 21 августа 2011

Если этот тест находится в вашем каталоге spec/controllers, то вызываемый вами метод get не ожидает путь, он ожидает символ для действия контроллера, которое вы хотите вызвать.Поэтому вам нужно изменить строку expect на что-то вроде:

expect { get :edit, :id => @article.id }.to raise_error(ActiveRecord::RecordNotFound)

Для получения дополнительной информации ознакомьтесь с документацией Спецификации контроллера RSpec *1008*.

...