ОШИБКА: ноль не может быть принудительно введен в Fixnum
Прежде всего, этот вопрос немного похож на мой предыдущий вопрос, но я чувствовал, что он достаточно отличается, чтобы начать новую тему. Проблема возникает, когда я пытаюсь проверить валидацию на моей модели. У меня есть модель пользователя, которая должна требовать поле:default_price. Мой тест выглядит следующим образом:
it "should require default packs" do
User.new(FactoryGirl.build(:user, :default_packs => " ")).should_not be_valid
end
Однако, когда я запускаю тест, я получаю следующую ошибку:
Failure/Error: should_not be_valid
TypeError:
nil can't be coerced into Fixnum
# ./app/models/user.rb:62:in `*'
# ./app/models/user.rb:62:in `daily_saving_potential_cents'
# ./spec/models/user_spec.rb:155:in `block (2 levels) in <top (required)>'
Daily_saving_potential_cents определяется следующим образом:
def daily_saving_potential_cents
return default_price_cents * default_packs
end
default_price_cents
это просто монетизированная версия default_price
и default_packs - это еще одно поле в моей модели. Проблема связана с тем, что эти два не могут быть умножены вместе, когда default_price_cents пусто, но как мне это исправить в моих тестах? Из-за моей проверки default_price_cents никогда не должен быть пустым, но это если я проверяю это.
3 ответа
Причиной этой проблемы является любая арифметическая операция целого числа с нулем, например.
1 + ноль
1 * ноль
и т.п.
Вы можете справиться с этим, только проверив, равен ли второй аргумент нулю или нет.
Из вашего кода вы передаете параметр объекта пользователя в User.new. Я думаю, что вы должны использовать
User.new(FactoryGirl.attributes_for(:user, :default_packs => " "))
Пожалуйста, попробуйте это.
Я решил это, просто проверив валидации новых определений модели, используя:
def daily_saving_potential_cents
unless default_price_cents.nil? && default_packs.nil?
return default_price_cents * default_packs
end
end