Тестирование действия контроллера Rails без прямого маршрута - PullRequest
1 голос
/ 13 декабря 2010

Я строю свой собственный блог, чтобы изучать rails3.

Нужно, чтобы мои URL были отформатированы в:

/blog/year/month/slug

Итак, я настроил мой route.rb следующим образом:

Blog::Application.routes.draw do
  match '/blog', :to => 'post#index'
  match 'blog/:year/:month/:slug', :to => 'post#show'
  root :to => 'post#index'
...

Тестирование через веб-браузер работает отлично.Проблема возникает, когда я хочу проверить метод действия show моего PostController.

Когда я выполняю этот тест:

class PostControllerTest < ActionController::TestCase
  test "can get a post by slug" do
    get :show
    assert_response :success
  end
end

Я получаю эту ошибку:

ActionController::RoutingError: No route matches {:controller=>"post", :action=>"show"}

Как я могу написать свой тест, чтобы я мог выполнить метод show action в моем контроллере Post?

1 Ответ

2 голосов
/ 13 декабря 2010

По крайней мере, ожидается, что будут установлены параметры year, month и slug. Ваши маршруты требуют так много, по крайней мере.

В вашем тесте:

test "can get a post by slug" do
  post = Post.create(:slug => "best-post-ever")
  get :show, :slug => post.slug, :year => Time.now.year, :month => Time.now.month
  assert_response :success
end

С этими тремя параметрами маршрут будет сопоставлен, и ваш запрос будет обработан.

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