ruby-on-rails – RSpec:DRY测试一组值的方法
发布时间:2020-12-17 02:28:56 所属栏目:百科 来源:网络整理
导读:我有一个投票模型,它有一个名为score的类方法.基本上,我在电子表格中创建了一个数学方程式,并试图在 ruby中重现这一点.但是,我的第一次工作不起作用,所以我真的需要开始添加更多的测试. 我想要测试它的方法是从我的电子表格中获取一堆输入和输出值并对每个值
我有一个投票模型,它有一个名为score的类方法.基本上,我在电子表格中创建了一个数学方程式,并试图在
ruby中重现这一点.但是,我的第一次工作不起作用,所以我真的需要开始添加更多的测试.
我想要测试它的方法是从我的电子表格中获取一堆输入和输出值并对每个值进行测试.所以基本上,测试可以解释为这样: inputs = [a,b,c] ... score.should == x inputs = [a,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中进行这种测试吗? 谢谢! 解决方法
是的,您可以执行以下元编程来运行一系列测试,所有测试都遵循相同的格式:
results = { x: ['a','b','c'],y: ['a','c','d'] } results.each do |score,values| it "should have a score of #{score}" do test_object = Votable.new(...) values.each do |value| User.create(...).vote.create(value: value,votable: test_object) end test_object.votes.score.should == score end end (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |