我想创建FactoryGirl对象并跨组使用,而无需多次重新启动let block。应该只有一个用户在数据库中创建。我怎样才能实现它?
describe MyCLass do
let(:adm) { FactoryGirl.create(:user) }
describe "test for" do
#want to use :adm here
end
describe "test2 for" do
#want to use :adm here
end
describe "test3" do
#want to use :adm here
end
end
*我是RSpec的新手
答案 0 :(得分:3)
最好的办法是不要使用let
,而应使用before :all
:
describe MyCLass do
before :all do
@adm = FactoryGirl.create(:user)
end
describe "test for" do
@adm.methods_to_test
end
describe "test2 for" do
@adm.methods_to_test
end
describe "test3" do
@adm.methods_to_test
end
end
话虽如此,这可能不是一个好主意,因为它会创建相互依赖的测试,这不是你想要的!每个测试都应该独立运行,而不需要在测试之间修改状由于测试订单问题,拥有“全局”用户实例可能会导致抖动测试。
答案 1 :(得分:1)
在数据库中应该只创建一个用户。我怎样才能实现它?
每次测试后清理数据库。这是一般推荐的方法。例如,查找DatabaseCleaner gem。