我的好奇心不允许我闭嘴。这是 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/