Rspec контроллер RoutingError - PullRequest
       1

Rspec контроллер RoutingError

0 голосов
/ 02 марта 2012

У меня определены следующие маршруты

  match '/admin', :to => "admin/dashboard#index", :module => "admin"
  match '/admin/sales', :to => "admin/dashboard#sales", :module => "admin"

В dashboard_controller_spec я добавляю следующее:

describe Admin::DashboardController do
  describe "#sales" do
    it "should set schedule" do
      get :sales
      assigns(:schedule).should_not be_nil
    end
  end
end

Когда я запускаю тест, я получаю следующую ошибку:

ActionController::RoutingError: No route matches {:action=>"sales", :controller=>"admin/dashboard"}

Есть идеи? Я думаю, что это как-то связано с модулем.

Спасибо

Ответы [ 2 ]

1 голос
/ 06 марта 2012

Обратите внимание, что у вас есть опечатка в назначениях (у вас есть заданий ).

Мне удалось повторить эту точнуюspec успешно (Rails 3).

Файл dashboard_controller.rb должен находиться внутри app/controllers/admin/
Это мой быстрый тест:

class Admin::DashboardController < ApplicationController
  def sales
    @schedule = "test"
    render :nothing => true 
  end
end

И результаты:

$ bundle exec rspec spec/controllers/dashboard_controller_spec.rb 
creating sqlite in memory database

Admin::DashboardController
  #sales
    should set schedule

Finished in 1.25 seconds
1 example, 0 failures
0 голосов
/ 25 мая 2012

Я разрабатываю движок Rails для своей компании, который предоставляет API для приложений, которые мы запускаем.Мы все еще используем Rails 3.0.9, с последней версией Rspec-Rails (2.10.1).У меня была похожая проблема, в которой я определил маршруты следующим образом:

match '/companyname/api_name' => 'CompanyName/ApiName/ControllerName#apimethod'

У меня была похожая ошибка:

ActionController::RoutingError:
 No route matches {:controller=>"company_name/api_name/controller_name", :action=>"apimethod"}

Я потратил много времени, пытаясь выяснить,как заставить мой тест работать.Различные версии Rspec, переопределение моего маршрута с использованием вложенных областей и т. Д.

Оказывается, мне просто нужно было переопределить мой маршрут в случае подчеркивания, чтобы RSpec мог его сопоставить.

match '/companyname/api_name' => 'company_name/api_name/controller_name#apimethod'

IПредположим, что в тестах контроллера Rspec используется обратный поиск, основанный на регистре подчеркивания, тогда как Rails установит и интерпретирует маршрут, если вы определите его в регистре верблюдов или подчеркивании.

...