Функциональный тест Rails с ошибками приборов с «Mysql :: Error: Duplicate entry» - PullRequest
2 голосов
/ 01 февраля 2011

Итак, у нас есть стандартные тесты скаффолдов для модели User, а именно:

  test "should create user" do
    assert_difference('User.count') do
      post :create, :user => @user.attributes
    end

    assert_redirected_to user_path(assigns(:user))
  end

И у нас есть пользовательское приспособление:

  one:
    email: test2@test.com
    name: Joe Smith

Проблема в том, что тест не пройден:

1) Ошибка: test_should_create_user (UsersControllerTest): ActiveRecord :: RecordNotUnique: Mysql :: Ошибка: повторяющаяся запись 'test2@test.com' для ключа 2: ВСТАВИТЬ INTO users

То, что, похоже, происходит, заключается в том, что rails загружает приборы, а затем пытается создать пользователя СНОВА, используя те же самые данные, и ограничение уникальности не выполняется. Это все имеет смысл. Вопрос в том, как мы можем это проверить, если вам нужно извлечь данные из файла фикстур для пользовательского объекта, создаваемого в тесте, если этот же прибор используется для предварительного заполнения базы данных?

1 Ответ

0 голосов
/ 02 февраля 2011

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

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

Затем я бы изменил приведенный выше вызов, чтобы отправить правильные параметры в действие создания и пройти тестирование.

...