Случайные сбои RSpec, сравнивающие Floats (Eq matcher) - PullRequest
4 голосов
/ 14 марта 2019

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

Случайно, и не так часто, тест в моем наборе RSpec не пройден, и яВы получите ошибку, подобную этой:

expected: 0.69
     got: 0.69 (0.69e0)

(compared using ==)

Код RSpec сравнивает два числа с плавающей запятой из двух разных моделей, которые должны иметь одинаковое значение при выполнении спецификации.Есть ли способ воспроизвести это в командной консоли?Я пробовал очевидные вещи (ниже), но, честно говоря, я в растерянности.Если я повторю тест еще раз, я не смогу воспроизвести проблему.

0.69 == 0.69e0 => true
0.69 == 0.69 => true
6.9e-1 == 0.69 => true

Ответы [ 2 ]

4 голосов
/ 15 марта 2019

Это общая проблема тестирования чисел с плавающей запятой. Я всегда конвертирую их в строки для сравнения при использовании RSpec:

expect(float.to_s).to eq '0.69'
2 голосов
/ 16 марта 2019

При тестировании чисел с плавающей запятой я рекомендую использовать RSpec's be_within matcher .

Пример:

expect(my_float).to be_within(0.01).of(0.69)

Вы должны выбрать разрешение, которое имеет смысл для вашего варианта использования. (0,001, 0,0001 и т. Д.)

...