Rails 4-модульный тест не удалось создать объект модели


Я хочу провести модульное тестирование приложения с использованием shoulda.

В тесте, который я делаю

User.create!(name: "James")

Когда я запускаю тест, я получаю следующую ошибку:

ActiveRecord::StatementInvalid: Mysql2::Error: Field 'name' doesn't have a default value: INSERT INTO `users` (`created_at`, `updated_at`, `id`) VALUES ('2014-04-07 12:03:07', '2014-04-07 12:03:07', 980190962)

Имеет ли это какое-то отношение к сильным параметрам rails 4?

Как я могу это решить?

3 3

3 ответа:

Проверьте, есть ли у вас недействительные светильники, лежащие вокруг. Попробуйте удалить / исправить test/fixtures/users.yml

Примечание: Вы должны получить полные стоп-треки в модульных тестах, отключив глушители backtrace в config/initializers/backtrace_silencers.rb.

Имеет ли это какое-то отношение к сильным параметрам rails 4?

НЕТ, Сильные параметры не имеют к этому никакого отношения, потому что вы создаете свой объект непосредственно из хэша, а не из любого ActionController::Parameters.

Проблема исходит откуда-то еще (вероятно, из вашей базы данных).

Как я вижу из этой статьи , решением вашей проблемы может быть миграция вашего поля следующим образом:

change_column :users, :name, :string, :limit => 255, :null => false, :default => ''

Я получил аналогичную проблему во время выполнения модульных тестов. Это может произойти, если ваше соединение с БД mysql находится в строгом режиме. Отключите строгий режим, добавив параметр в базу данных.yml, как показано ниже, и попробуйте.

test:
  database:
    host: localhost
    name: test_db
    username: username
    password: password    
    strict: false