Rails 4.2 тестирования с MiniTest и моккогася объекты, извлеченных из базы данных
Я хочу, чтобы мое модульное тестирование в рамках модели этого тестирование - не тестирование функциональности сделали другую модель. Модель has_many :language_progresses
и я пытаюсь проверить метод, который принимает подмножество тех language_progresses
и суммирует выход метод, называемый на них, как это:
def outcome_month_score(outcome_area, year = Date.today.year, month = Date.today.month)
lps = language_progresses.includes(:progress_marker).
where("progress_markers.topic_id" => outcome_area.id)
lps.inject(0){ |sum, lp| sum + lp.month_score(year, month) }
end
вот мой тест:
it "must calculate the outcome score for an outcome area in a month" do
year = 2015
month = 1
pm1 = progress_markers(:skills_used)
pm2 = progress_markers(:new_initiatives)
pm_other = progress_markers(:devotional)
lp1 = LanguageProgress.new progress_marker: pm1
lp2 = LanguageProgress.new progress_marker: pm2
lp_other = LanguageProgress.new progress_marker: pm_other
lp1.stubs(:month_score).with(year, month).returns(1)
lp2.stubs(:month_score).with(year, month).returns(2)
lp_other.stubs(:month_score).with(year, month).returns(4)
state_language.language_progresses << [lp1, lp2, lp_other]
state_language.save
_(state_language.outcome_month_score(topics(:social_development), year, month)).must_equal 3
end
Моя проблема в том, что окурки перестают работать до того, как их результаты суммируются в методе. Они все возвращают 0, хотя я проверил, что они отлично работают в тесте сразу после их создания.
Я думаю, что когда языковые_программы загружаются из db, заглушки отменены.
Как проверить этот метод?
Хороший ответ, и я, вероятно, сделаю его принятым, если бы In недавно не прочитал статью, критикующую тестовую версию, заявив, как мы добавляем ненужную сложность в код, чтобы упростить тестирование. Я не против TDD, но я думаю, что есть что-то в том, что он говорит, и этот ответ может быть примером этого. –
Я бы сказал, что мой рефакторинг вашей модели на самом деле является лучшим кодом, и улучшенная тестируемость - лишь симптом этого. Между вашим ответом и моей, я знаю, какую модель и тест я бы предпочел сохранить ... –