Я пытаюсь решить, как проверить метод, который просто вычисляет среднее значение для связанных записей.Я обеспокоен тестированием реализации против фактического результата.
Скажем, у меня есть следующие модели ...
class User
has_many :interviews
def interview_grade
interviews.average(:score).round unless interviews.empty?
end
end
class Interview
belongs_to :user
end
И в user_spec.rb
У меня есть ...
describe "interview_grade" do
let(:user) {User.new}
context "when the user has interviews" do
before { user.stub_chain(:interviews, :empty?){false} }
it "should return an average of the appraisal ratings" do
user.interviews.should_receive(:average).with(:score).and_return(3.2)
user.work_history_grade.should == 3
end
end
context "when the user has no interviews" do
before {Interview.destroy_all}
it "should return nil" do
user.interview_grade.should be_nil
end
end
end
Эти испытания пройдены, но мне они кажутся хрупкими.Что если interview_grade
действительно вычислит сумму баллов (например).Поскольку я просто проверяю, что вызывается определенная цепочка методов, этот проходной тест не скажет мне, что результат на самом деле неверный.
Я попытался ввести заглушку user.interviews
, чтобы настроить доступные оценки.чтобы тест работал, но в Rails 3 это сложно сделать из-за того, что ассоциации загружаются лениво.то есть я не могу просто создать массив объектов Interview, потому что он не реагирует на среднее значение method
.
Любой совет с благодарностью.