Могу ли я тестировать вложенные ресурсы без предоставления явного внешнего ключа? - PullRequest
3 голосов
/ 01 декабря 2011

Я пытаюсь исправить свои функциональные тесты для вложенного ресурса. Мой config/routes.rb файл выглядит так:

Shop360::Application.routes.draw do

  resources :libraries do
    resources :library_imports
  end
end

Вложение ресурсов library_imports нарушает сгенерированные тесты, подобные этому:

test "should get index" do
  get :index
  assert_response :success
  assert_not_nil assigns(:library_imports)
end

потому что вложение изменяет все URL.

Я видел совет в нескольких местах, чтобы исправить это, добавив параметр library_id, например, так:

test "should get index" do
  get :index, :library_id => 1
  assert_response :success
  assert_not_nil assigns(:library_imports)
end

(вторая строка изменена)

Итак, чтобы заставить это работать, я должен явно указать library_id в моем файле library_import? Начиная с Rails 2.0 стало возможным определять ассоциации в данных фикстура, не прибегая к этим явным определениям ключей. Меня теперь заставляют вернуться в гнездо этой крысы, потому что я вкладываю ресурсы?

Нет ли лучшего способа сдать мой тест?

Ответы [ 2 ]

6 голосов
/ 02 декабря 2011

ОК, это было не так сложно, как я думал.Давайте начнем с фикстур:

library.yml

lib1:
  name: lib1
  description: Library one

lib2:
  name: lib2
  description: Library two

library_imports.yml

import1:
  name: import1
  description: Import one
  library: lib1

import2:
  name: import2
  description: Import two
  library: lib2

Я создаю ассоциации в этих данных фикстур надлежащим образом (т.е.ключи).

Теперь вспомним неудачный тест (в library_imports_controller_test.rb):

test "should get index" do
  get :index
  assert_response :success
  assert_not_nil assigns(:library_imports)
end

В верхней части этого файла находится обратный вызов установки, который выглядит так:1015 *

Итак, я могу сослаться на @library_import (и, в частности, на его поле library_id) в моем тесте.Я изменяю это так:

test "should get index" do
  get :index, :library_id => @library_import.library_id
  assert_response :success
  assert_not_nil assigns(:library_imports)
end

И мой тест переходит с красного на зеленый.

1 голос
/ 02 декабря 2011

Вы пытались определить отношения в файлах фикстур?

# fixtures/libraries.yml
philly:
  name: Free Library

# fixtures/library_imports
last_import:
  library: philly
...