1
我想优化我的规格。我通常在为嵌套资源和用户创建测试数据时遇到问题。我通常最终会建立一个之前(:每个)设置数据,这是由我的规格超过120个运行。让我告诉你:(这是不准确的,但你应该明白了吧)RSpec Rails测试数据
def setup_test_data
@user = FactoryGirl.create(:admin_with_account)
@account = @user.account
3.times do |n|
list = FactoryGirl.create(:list)
list.items << FactoryGirl.create_list(:item, 3)
@account.lists << list
end
end
before(:each){setup_test_data}
subject{List.merge(list1, list2)}
it{should have(6).items}
这里是为什么我不能缩短我的测试数据建立
def self.merge(lists)
merged_list = lists.first.account.subscriber_lists.build
name = "Merge of "
lists.each do |list|
name << "'#{list.name}', "
list.items.each do |item|
merged_list.items.build(item.dup.attributes)
end
end
merged_list.name = name.chop.chop
merged_list.save!
merged_list.reload # I use this to filter out duplicates via validations
end
我的选项: A)移动一些逻辑回控制器,该帐户依赖较少,保存在控制器 B)存根/嘲笑多了很多,但与嵌套资源+协会很难在这里做
C)你的想法:
感谢 雷
谢谢,我想这可能是最好的方法。我使用fixture_builder设置了一堆灯具,然后让我的setup_data方法将它们从数据库中拉出来。我仍然在努力工厂序列以及DatabaseCleaner的工作方式。但是我真的不想嘲笑和琢磨那么多,对每个规范进行的一些集成测试在过去对我很好。它只是比较慢,并不总是带有漂亮的代码。 – Ray 2012-03-20 09:42:38
那么如果你有更多的问题随时问! Factory女孩拥有相当不错的文档,DatabaseCleaner在他们的GitHub页面上也是如此,所以这是一个很好的开始。嘲笑和残留不是你应该回避的事情,因为测试很重要,简而言之,它们可以帮助你编写重复测试或“不良”测试。 – MrDanA 2012-03-20 17:08:25