1

我的好奇心不会让我闭嘴。这是 Rails 教程中的一些代码。

 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 用它做其他事情:PI 只是想知道,因为

 $ rails console test
 > User.all

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

4

1 回答 1

3

通常,当您为 rspec 生成 rails 时,它会将其放在您的 spec_helper.rb

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

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

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

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

于 2013-05-26T04:17:23.217 回答