每个循环使用Rspec的unit testing用例

我的模型中有以下方法

def get_performance_data para, child_para_hash performance_graph_data = {} child_para_hash.each do |cp| performance_graph_data[cp] = fetch_per_child_para_data(para, cp) end performance_graph_data end def fetch_per_child_para_data para, child_para test_performances.where(network_data_condition(para, child_para)).select("AVG(value)avg_value, activity").group('act_num') end 

我在理解如何为模型方法中的每个循环编写测试用例时遇到问题。

好的测试是关于validation方法的行为,而不是其内部工作。 因此,根据发布的示例,您的测试应该检查#get_performance_data是否返回了fixtures定义的performance_graph_data的正确值,而不是检查内部循环实现。

如果你的测试在概念上没有说“给定输入X,我的结果应该总是Y”,那么你可能正在测试错误的东西。 和往常一样,这条规则有例外,但如果没有充分的理由,我不会违反规则。

您可以通过将多个参数传递给and_return来从存根中返回连续值,例如

 mock_object = double('my_object') mock_object.stub(:foo).and_return(1,2,3) mock_object.foo # => 1 mock_object.foo # => 2 mock_object.foo # => 3 

您可以在示例中调整此模式,并将fetch_per_child_para_data返回的值存根,以模拟循环中重复方法调用的效果。