在测试中创建的模型对象会发生什么?

时间:2013-05-26 04:07:00

标签: ruby-on-rails ruby ruby-on-rails-3 rspec

我的好奇心不会让我闭嘴。以下是Rails Tutorial中的一些代码。

 describe "profile page" do
    let(:user) { FactoryGirl.create(:user) }
    before { visit user_path(user) }

    it { should have_selector('h1',    text: user.name) }
    it { should have_selector('title', text: user.name) }
  end

在测试返回true或false之后,此处创建的Factory对象会发生什么。上面的代码会将一个对象保存到数据库中,但它会在运行测试后自动回滚,或者Rails会用它做其他事情:P我只是想知道因为

 $ rails console test
 > User.all

不会返回任何内容,只会返回一个空数组。

1 个答案:

答案 0 :(得分:3)

通常当您为rspec执行rails generate时,它会将其放在您的spec_helper.rb中

  RSpec.configure do |config|
     config.use_transactional_fixtures = true
  end

这意味着Rspec将在每次测试时使用事务,并在之后将其回滚,以便在每次测试之间都有一个干净的数据库。如果将此设置为false,则不会执行此操作。

Factory.create确实会将记录保存到数据库中,但它会在测试运行后回滚。因此,如果您在测试后查找记录,则不再存在。

一般来说,这是最佳实践,因为不应该在测试中存在依赖关系,并且每个测试都应该测试一件事。