Rails 5.2 Rspec 3.8 - Почему атрибут десятичной модели преобразуется в строку? - PullRequest
0 голосов
/ 12 июня 2019

У меня есть такая миграция:

class AddScoreToContact < ActiveRecord::Migration[5.2]
  def change
    add_column :contacts, :score, :decimal, precision: 4, scale: 3, default: 0
  end
end

Когда я пытаюсь проверить, как это:

  contact = Contact.new(score: 0.5)

  puts contact.score.class # **outputs String**

  it 'is between 0 and 1' do
    expect(contact.score).to be_between(0, 1)
  end

Тест не пройден, если я не позвоню contact.score.to_f

Почему это строка?

Тестовый вывод:

Failure/Error: expect(contact.score).to be_between(0, 1)
       expected "0.5" to be between 0 and 1 (inclusive)

EDIT

Проверка модели:

 validates :score, presence: true
 validates :score, numericality: { greater_than_or_equal_to: 0,
                                   less_than_or_equal_to: 1 }

1 Ответ

0 голосов
/ 14 июня 2019

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

Странно, что это должно решить проблему, учитывая, что тест вообще не касается базы данных (он использует new, а не create для создания тестируемого объекта).

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

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