Испытания рельсов 3.1 стороны двигателя с RSpec 2
Я пытаюсь протестировать двигатель Rails 3.1 с помощью RSpec 2. После многих проб и ошибок (а также поиска документации и переполнения стека) приложение работает, и я получил большинство спецификаций для прохождения. Проблема в том, что мои спецификации маршрута все еще не работают.
Для движка " foo " с изолированным пространством имен и контроллером Foo:: BarsController, у меня есть это:
require "spec_helper"
describe Foo::BarsController do
describe "routing" do
it "routes to #index" do
get("/foo/bars").should route_to("bars#index")
end
it "routes to #new" do
get("/foo/bars/new").should route_to("bars#new")
end
end
end
Это приводит к следующему:
1) Foo::BarsController routing routes to #index
Failure/Error: get("/foo/bars").should route_to("bars#index")
ActionController::RoutingError:
No route matches "/foo/bars"
# ./spec/routing/foo/bars_routing_spec.rb:6:in `block (3 levels) in <top (required)>'
2) Foo::BarsController routing routes to #new
Failure/Error: get("/foo/bars/new").should route_to("bars#new")
ActionController::RoutingError:
No route matches "/foo/bars/new"
# ./spec/routing/foo/bars_routing_spec.rb:10:in `block (3 levels) in <top (required)>'
Похоже, что мое фиктивное приложение spec настроено правильно:
Rails.application.routes.draw do
mount Foo::Engine => "/foo"
end
Если это помогает ответить на этот вопрос, мой взгляд спецификации также не работают. Вот типичная ошибка:
9) foo/bars/index.html.erb renders a list of bars
Failure/Error: render
ActionView::Template::Error:
undefined local variable or method `new_bar_path' for #<#<Class:0x00000100c14958>:0x0000010464ceb8>
# ./app/views/foo/bars/index.html.erb:3:in `___sers_matt__ites_foo_app_views_foo_bars_index_html_erb___1743631507081160226_2184232780'
# ./spec/views/foo/bars/index.html.erb_spec.rb:12:in `block (2 levels) in <top (required)>'
Есть идеи?
4 ответа:
Попробуйте изменить метод
get
, чтобы использовать определенный маршрутget("/foo/bars", :use_route => :foo)
Ладно, у меня получилось! И написал об этом пост в блоге.
Http://www.matthewratzloff.com/blog/2011/09/21/testing-routes-with-rails-3-1-engines/
Требуется новый метод для импорта маршрутов движка в набор маршрутов приложения для тестов.
Edit: поймал ошибку с именованной обработкой маршрута и исправил ее.
На самом деле не так уж трудно заставить это работать. Это немного банально, так как вы добавляете код к маршрутам движка.файл rb, который изменяется в зависимости от того, в каком env он выполняется. Если вы используете подход spec/dummy site для тестирования движка, то используйте следующий фрагмент кода в /config/routes.файл rb:
# <your_engine>/config/routes.rb if Rails.env.test? && Rails.application.class.name.to_s == 'Dummy::Application' application = Rails.application else application = YourEngine::Engine end application.routes.draw do ... end
То, что это в основном делает, - это выключение вашего движка для фиктивного приложения и запись маршрутов к нему в тестовом режиме.
Вот официальное решение документации rspec:
Https://www.relishapp.com/rspec/rspec-rails/docs/routing-specs/engine-routes