ActiveRecord :: NotNullViolation - Столбец Mysql2 не может быть пустым - PullRequest
2 голосов
/ 08 января 2020

Я сталкиваюсь с проблемой при создании записи через FactoryBot, проблема возникает только в среде test.

Когда я запускаю команду на консоли development :

FactoryBot.create(:accounting_pbs_reservation, factor: 3.0) (столбец factor также определен на фабриках, но я хочу передать его явно)

Тогда он правильно выполняется и создается, но когда я запускаю команду на test environment, затем выводится ошибка:

ActiveRecord::NotNullViolation:
  Mysql2::Error: Column 'factor' cannot be null: 
INSERT INTO `accounting_pbs_reservations` (`start`, `rl_walltime`, `factor`) 
VALUES (1503468000, 1430000, 3.0)

Даже если представлен столбец factor .

Проблема также возникает, когда я хочу создать экземпляр модели в контроллере RSpe c.

Кто-нибудь сталкивался с такой же проблемой? Схема базы данных для test и development

Схема базы данных для factor установлена ​​как

| Field  | Type   | Null | Key | Default | Extra          
| factor | double | NO   |     | 1       |                

Определение FactoryBot довольно дамп:

FactoryBot.define do
  factory :accounting_pbs_reservation do
    factor { 1.0 }
    start { 1_503_468_000 }
    rl_walltime { 1_430_000 }
  end
end

RSpe c определение, где происходят ошибки:

require 'rails_helper'

RSpec.describe AccountingPbsReservationsController, type: :controller do
  let(:valid_accounting_pbs_reservation) { FactoryBot.create(:accounting_pbs_reservation) }
  let(:valid_attributes) { FactoryBot.attributes_for(:accounting_pbs_reservation) }

...
    context 'when logged as admin' do
      login_admin
      it "returns a success response" do
        get :show, params: { id: valid_accounting_pbs_reservation.to_param         expect(response).to be_successful
      end
...

1 Ответ

1 голос
/ 09 января 2020

Таким образом, проблема была в триггере базы данных.

Триггеры устанавливают значение factor как ноль , если в связанной таблице нет данных. И связанная таблица пуста, потому что, когда тест завершен, он очищает всю базу данных.

...