ruby-on-rails - 在测试中创建的模型对象会怎样?

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

我的好奇心不允许我闭嘴。这是 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 会用它做其他事情 :P 我只是想知道,因为

 $ rails console test
 > User.all

除了一个空数组什么也不会返回。

最佳答案

通常当你为 rspec 生成 rails generate 时,它​​会将它放在你的 spec_helper.rb 中

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

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

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

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

关于ruby-on-rails - 在测试中创建的模型对象会怎样?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16756154/

相关文章:

ruby-on-rails - 包含模块时出现 "Uninitialized constant"错误

javascript - Ruby on rails3 javascript 代码放在哪里

ruby-on-rails - Stripe rails : Invalid integer: 1. 06

ruby - 变量声明: difference between "@@" and "class << self"

javascript - 如何将 Highcharts 自动保存为特定文件夹中的图像

sql - 如何优化/缓存 Rails 查询

ruby-on-rails - rails 4 ERB : consistent date format

ruby-on-rails - Rails 使用不同的布局?

ruby-on-rails - 错误率: Devise: Email confirmation on heroku gives Connection refused error

ruby-on-rails - 包含用于 rspec 测试/w 设备的 Controller 宏的问题