【发布时间】:2011-04-03 02:44:26
【问题描述】:
我有一个vote 模型,它有一个名为score 的类方法。基本上,我在电子表格中创建了一个数学方程,并试图在 ruby 中重现它。但是,我的第一次尝试不起作用,所以我真的需要开始添加更多测试。
我想进行测试的方法是从我的电子表格中获取一堆输入和输出值并分别测试它们。所以基本上,测试可以解释为如下所示:
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 中进行这种测试的 DRY 方法吗?
谢谢!
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-3 refactoring rspec dry