hoi*_*omt 4 testing ruby-on-rails
有没有办法阻止Rails在运行测试之前清除测试数据库?我想使用生产数据库的副本进行测试,因此我需要防止rails每次都清除数据.
有相当多的数据,所以我想尽可能避免使用灯具,因为我假设每次都需要很长时间来填充数据库.
谢谢,迈克
您可以通过手动运行测试来避免它
ruby -Itest test/unit/some_test.rb
Run Code Online (Sandbox Code Playgroud)
执行测试数据库重新创建的rake任务(您可以像这样手动运行)
rake db:test:prepare
Run Code Online (Sandbox Code Playgroud)
但我的建议是,你做错了.测试中的一般想法是,您知道数据库的状态,因此知道对函数的期望.
例如.
test "search_by_name" do
expected = User.all.select{|u| u.name =~ /arthur/i}
assert_equal expected, User.search_by_name("Arthur")
end
Run Code Online (Sandbox Code Playgroud)
是一个很好的测试,但是,如果你不知道数据库的状态,你怎么知道有一个亚瑟?
上述测试将通过三个不良案例;
因此,更好地创建虚假现实,我们知道数据库的状态.
我们想要;
一个更好的测试,假设db是空的,并且使用工厂女孩,可能是.
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
Run Code Online (Sandbox Code Playgroud)