Целочисленный атрибут модели преобразуется в строку при вызове assert_equal - PullRequest
0 голосов
/ 11 февраля 2019

Когда я проверяю значение атрибута целочисленной модели с помощью assert_equal, возвращаемое значение является строкой.

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

таблица базы данных:

create_table :launches do |t|
  ...
  t.integer :result
  ...

  t.timestamps
end

модель:

validates :result, presence: true, numericality: { only_integer: true, greater_than: 0 }

Вот тест:

@launch.reload
assert_equal 2, @launch.result

ион выдает эту ошибку:

test_edit_a_launch#LaunchesNewAndEditTest (0.99s)
    Expected: 2
      Actual: "2"
    test/integration/launches_new_and_edit_test.rb:57:in `block in <class:LaunchesNewAndEditTest>'

Значения возвращаются в виде строки, и сравнение с целым числом завершается неудачно.Если я изменю тест на:

@launch.reload
assert_equal 2, @launch.result.to_i

, он будет работать.Но это не имеет никакого смысла и должно сравнивать целочисленное значение в модели с ожидаемым целочисленным результатом.Когда я манипулирую объектом в консоли rails, значение является целым числом.

1 Ответ

0 голосов
/ 13 февраля 2019

Проблема заключалась в том, что тестовая база данных и база данных разработки (обе PostgreSQL) вышли из синхронизации.Столбец «результат» изначально был «символьная переменная».В процессе разработки я изменил его на целочисленный столбец в процессе миграции и запустил его.По какой-то причине миграция не выполнялась в тестовой базе данных.

Чтобы исправить это, я запустил следующую команду:

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