2013-10-11 26 views
-1

我对FactoryGirl有问题。我创建了一个单独的文件,在哪里做:factorygirl在测试前保存数据

shared_context 'basic organization structure' do 
    subject(:organization) { FactoryGirl.create_list(:organization, 2) } 
end 

并将其连接到测试,如include_context。当我运行测试时,我在测试数据库中看不到数据。它们只在测试中明确调用时出现。 如何确保在测试数据存储在数据库之前?

回答

0

你混合letsubjectsubject不代表变量/方法,所以它不能像赋值一样工作。

取而代之,使用let来表示变量(实际上它是一种方法),并在稍后进行处理。

shared_context 'basic organization structure' do 
    let(:organization) { FactoryGirl.create_list(:organization, 2) } 
    subject {organization} # Note: use method name here, not symbol 
end 
0

我推测你使用database_cleaner在测试之间清理数据库?如果有,您有2个选择:(a)如果您希望组织列表持续存在于您的测试套件中,请将其添加到seed.rb文件,并将database_cleaner策略设置为:transaction或(b)在每个测试中使用before(:each) do块在数据库中的每个测试之前显式创建组织列表。

(有看DB当测试运行,因为database_cleaner抹DB如此之快,它不可能,你就可以看到记录了他们在删除之前的小点。)