Тестирование вложенных действий контроллера - PullRequest
0 голосов
/ 29 марта 2012

В routes.rb У меня есть:

resources :themes do
  resources :messages
end

В messages_controller_test.rb У меня есть:

  setup do
    @theme = themes(:one)
    @message = messages(:one)
  end

  test "should create message" do
    assert_difference('Message.count') do
        post :create, message: { title: "Title", body: "Some body", theme_id: @theme.id }
    end

    assert_redirected_to theme_path(@theme)
  end

И я получаю сообщение об ошибке: Couldn't find Theme without an ID

Что не так?

1 Ответ

3 голосов
/ 29 марта 2012

С вложенными ресурсами, маршрут создания выглядит следующим образом:

/themes/:theme_id/messages

, поэтому вам нужно передать следующие параметры:

test "should create message" do
  assert_difference('Message.count') do
      post :create, {theme_id: @theme.id, message: { title: "Title", body: "Some body", theme_id: @theme.id }}
  end

  assert_redirected_to theme_path(@theme)
end

И фактически в вашем действии контроллера вы можете справиться: theme_id param, чтобы больше не передавать его в params [: message]

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