Как RSpec загружает модель с условной проверкой? - PullRequest
0 голосов
/ 27 сентября 2019

У меня есть модель с 3 миграциями:

  1. создает таблицу базы данных, (рабочий код уже существует)
  2. вставляет начальные записи в таблицу, (рабочий код уже существует)
  3. добавить новый столбец "___ тип" в таблицу (новая миграция)

После этого я добавил проверку в модель для принудительного присутствия нового атрибута "___ type" .

2. Миграция не удалась, потому что метод create хотел проверитьатрибут __type, но в то время этот столбец не существовал.

Чтобы избежать этого, я добавил к миграции предложение if column_names.include?(:__type), чтобы все миграции прошли.

Но после этого проверка RSpec завершается неудачно:

class MyModel

validates :__type, presence: true if column_names.include?(:__type)

Спецификация RSpec:

it { should validate_presence_of(:__type) }

Ошибка RSpec:

"MyModel неправильно проверил, что: тип __ не может быть пустым / ложным. После установки: тип __до ‹nil› средство сравнения ожидало, что MyModel будет недействительным, но вместо этого он действителен. "

Примечание:

Я намеренно использую стандартное ключевое слово if вместо символа if:, потому что для миграции 2. необходимо оценить это предложение при загрузке самого кода.Поэтому, когда я запускаю миграцию, для нее не требуется столбец "__type", но когда я запускаю сервер rails, он уже существует.

Как проверить наличие атрибута "___ type"

1 Ответ

0 голосов
/ 27 сентября 2019

Чтобы проверить наличие атрибута модели, вы можете использовать метод response_to ?.

it { should respond_to?(:__type) }  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...