Rspec,FactoryGirl:FactoryGirl.create in before(:all)不是持久记录?

时间:2013-10-10 19:45:55

标签: ruby-on-rails rspec factory-bot

我正在尝试为我的Image对象进行一些测试创建一些记录。然而,似乎他们不坚持:

describe Image do
    before(:all) do
      for i in 0..2
        FactoryGirl.create(:image)
      end

      puts Image.count
    end

    it "blah blah blah" do
      puts Image.count
    end

    it "blah blah blah 2" do
      puts Image.count
    end

在上面的示例中,对Image.count的第一次调用返回3;后续调用返回0.当我使用before(:each)时,该示例有效,但我觉得before(:all)应该是我想要的。

1 个答案:

答案 0 :(得分:3)

你很少想在之前使用(:all)。你想在之前使用(:每个)。 before(:all)在context / describe块开始时运行,之前(:each)在每个内部规范之前运行。这就是为什么第二次和第三次通话你得到0的原因。

还有一个重要原因是您不希望在之前使用(:all),因为您不希望测试一起运行。这意味着示例被绑定在一起,这在测试中是绝对禁止的。你应该真的只使用before(:all)来设置全局协作者的东西,而不是你在示例中描述的东西。

简答:使用之前(:每个)