Тестирование маршрутов двигателя Rails 3.1 с помощью RSpec 2 - PullRequest
2 голосов
/ 21 сентября 2011

Я пытаюсь протестировать движок 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

Это приводитin:

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)>'

Мое фиктивное приложение для спецификаций, похоже, настроено правильно:

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 ]

1 голос
/ 22 сентября 2011

ОК, я получил это работает! И написал в блоге об этом.

http://www.matthewratzloff.com/blog/2011/09/21/testing-routes-with-rails-3-1-engines/

Требуется новый метод для импорта маршрутов двигателя в маршрут приложения, установленный для тестов.

Редактировать: Исправлена ​​ошибка с обработкой именованного маршрута и исправлено.

1 голос
/ 22 сентября 2011

Попробуйте изменить get метод для использования определенного маршрута

get("/foo/bars", :use_route => :foo)
0 голосов
/ 11 января 2014

Вот официальное решение по документации rspec:

https://www.relishapp.com/rspec/rspec-rails/docs/routing-specs/engine-routes

0 голосов
/ 05 апреля 2013

На самом деле не так сложно заставить это работать. Это немного странно, так как вы добавляете код в файл route.rb движка, который меняется в зависимости от того, в какой среде он запущен. Если вы используете 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

То, что он в основном делает, это отключает ваш движок для фиктивного приложения и записывает маршруты к нему в тестовом режиме.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...