У меня есть модель vote
, в которой есть метод класса, называемый score
. По сути, я создал математическое уравнение в электронной таблице и пытаюсь воспроизвести его в рубине. Однако моя первая попытка не сработала, поэтому мне действительно нужно начать добавлять еще тонну тестов.
То, как я » Я хочу провести тестирование, это взять стек входных и выходных значений из моей электронной таблицы и протестировать их каждое. В общем, тесты можно было бы составить следующим образом:
inputs = [a,b,c] ... score.should == x
inputs = [a,b,c,d] ... score.should == y
inputs = [c,d] .... score.should == z
Однако самый короткий способ, который я нашел для записи этого в RSpec, - это дать пример для каждого случая, примерно так (упрощенный пример, но должен дать вам идея):
it "should have a score of X" do
test_object = Votable.new(...)
@user1.vote.create(:value=>##, :votable=>test_object)
@user2.vote.create(:value=>##, :votable=>test_object)
@user3.vote.create(:value=>##, :votable=>test_object)
test_object.votes.score.should == X
end
Итак, вышеперечисленное работает, но для каждого примера требуется много текста, и, чтобы сгладить изгибы и обеспечить хорошее тестовое покрытие, я бы хотел запустить около 20 тестовых примеров.
Итак, серьезно, должен быть более простой способ настроить это один раз, а затем протестировать кучу возможных комбинаций ввода / вывода, верно? Может ли кто-нибудь предложить СУХОЙ способ выполнить такой тест в RSpec?
Спасибо!