有没有办法阻止Rails在运行测试之前清除测试数据库?我想使用我的生产数据库的副本进行测试,因此我需要防止rails每次清除数据。Ruby on Rails - 测试数据库
有相当多的数据,所以我想尽可能避免使用灯具,因为我假设每次都需要很长时间来填充数据库。
谢谢, 迈克
有没有办法阻止Rails在运行测试之前清除测试数据库?我想使用我的生产数据库的副本进行测试,因此我需要防止rails每次清除数据。Ruby on Rails - 测试数据库
有相当多的数据,所以我想尽可能避免使用灯具,因为我假设每次都需要很长时间来填充数据库。
谢谢, 迈克
您可以通过运行测试,避免手动
ruby -Itest test/unit/some_test.rb
这是耙的任务,做测试分贝娱乐(你可以手动像这样运行它)
rake db:test:prepare
但我的建议是你做错了。 测试中的一般想法是,您知道数据库的状态,因此知道对函数的期望。
例如。
test "search_by_name" do
expected = User.all.select{|u| u.name =~ /arthur/i}
assert_equal expected, User.search_by_name("Arthur")
end
是一个很好的测试 但是,如果你不知道该数据库的状态,你怎么知道有一个阿瑟?
上面的测试会通过三种不好的情况;
所以它更好地创建一个虚假的现实, 我们知道数据库的状态。
我们想;
更好的测试,假设db是空的,并且使用factory girl,可能是。
test "search_by_name" do
expected = [
Factory.create(:user, :name => "Arthur"),
Factory.create(:user, :name => "MacArthur")
]
not_expected = [Factory.create(:user, :name => "Archer")]
assert_equal expected, User.search_by_name("Arthur")
end
这没有奏效。 ruby -Itest ...命令删除了我的表中的数据。架构保持不变,但数据已被删除。但是,关于已知数据的观点很好。我现在正在使用测试进行用户界面验证,因此我想使用生产数据,以便查看(并测试)用户看到的内容。但更好的办法可能是获得我需要的表格,创建固定装置/种子并以这种方式进行。谢谢你的回答,我很感激 – hoitomt
测试的关键在于让数据库充满可预测的数据,这些数据不会因一次测试而改变。通过使用生产数据,您将失去这一优势。我真的会考虑用'FactoryGirl'来为你模拟数据库数据。 – iwasrobbed