Добавление validates_uniqueness_of к модели не проходит функциональные тесты - PullRequest
2 голосов
/ 13 ноября 2010

Попытка создать простое приложение в рельсах 3.

Если я создаю модель команды с rails g scaffold team name:string && rake db:migrate, а затем запускаю rake, я получаю успех из готовых тестов.

Если я просто добавлю validates_uniqueness_of :name к модели команды.Функциональные тесты завершаются неудачно с

  1) Failure:
test_should_create_team(TeamsControllerTest) [/test/functional/teams_controller_test.rb:20]:
"Team.count" didn't change by 1.
<3> expected but was
<2>.

Я изменил tests / fixtures / teams.yml, чтобы он выглядел так:

one:
    name: MyString
two:
    name: MyString2

Тест все равно не пройден.

Это не может быть гораздо более простым, чем это;что я пропустил?

1 Ответ

10 голосов
/ 26 ноября 2010

Fixtures в основном представляют экземпляры модели, которые находятся в базе данных.

Если вы посмотрите на верхнюю часть test / functions / team_controller_test.rb, вы увидите

setup do
  @team = teams(:one)
end

, а затем при неудачном функциональном тесте вы получите

post :create, :team => @team.attributes

Вот что происходит: вы пытаетесь создать новую команду с теми же атрибутами, что и у "название команды: one". Поскольку оба имеют одинаковое имя (поскольку они имеют одинаковые атрибуты), проверка уникальности завершается неудачей.

Попробуйте заменить блок настройки на этот

setup do
  @team = teams(:one)
  @team.name = 'unique name'
end

Теперь вы создадите новую команду с именем «уникальное имя» (которого нет в базе данных в соответствии с графиками), и ваш тест пройдет.

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