从我读过的关于Rails 5.1新系统规范的所有内容中,我的理解是Rails现在在内部处理数据库事务。
来自Rspec's blog:“[之前]您的测试和您正在测试的代码无法共享数据库事务,因此您无法使用RSpec的内置机制来回滚数据库更改,而是需要像数据库更清洁的gem。通过系统测试,Rails团队已经做了很多努力以确保不是这种情况,因此您可以安全地使用RSpec的机制,而无需额外的宝石。“
我的经历不同:
rails_helper.rb
中的所有引用。由于validates uniqueness
错误,JS测试现在失败了。非JS测试通过。我的测试非常简单。
let(:subject) { page }
let(:user) { create :user, name: "TestUser" }
it "displays the user page", :js do
visit user_path(user)
it is_expected.to have_content "TestUser"
end
禁用数据库清除程序并:js => true
我得到user named TestUser already exists
。使用:js => false
测试通过。
系统测试和rspec的当前情况如何? Rails是否在内部处理数据库事务,还是仍需要数据库清理程序?有没有人遇到这个,或者可以指出我的相关信息?
答案 0 :(得分:16)
您不需要DatabaseCleaner gem。以下是您需要的步骤的快速摘要:
config.use_transactional_fixtures = true
config.include Devise::Test::IntegrationHelpers, type: :system
basic_configure
个文件。RSpec.feature
替换为RSpec.describe
。有关我如何管理交换机的详细信息,请参阅this commit。这是一个麻烦,但希望现在更容易5.1.5已经修复了ActionDispatch :: SystemTesting :: Server问题(我不得不在5.1.4中修补文件,但你现在不用了)。 / p>