【发布时间】:2018-08-21 02:47:20
【问题描述】:
从我所读到的关于 Rails 5.1 新系统规范的所有内容中,我的理解是 Rails 现在在内部处理数据库事务。
来自Rspec's blog:“[以前] 你的测试和被测代码不能共享数据库事务,因此你不能使用 RSpec 的内置机制来回滚数据库更改,而是需要像数据库清理器这样的 gem。使用系统测试中,Rails 团队已经努力确保不会出现这种情况,因此您可以安全地使用 RSpec 的机制,而无需额外的 gem。”
我的经历不一样:
- 升级到 Rails 后,我的 Rspec 功能测试全部通过 5.1。
- 我将“功能”规范重命名为“系统”规范。所有测试都通过了。
- 我删除了Database Cleaner gem,并删除了
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 是否在内部处理数据库事务,还是仍需要 Database Cleaner?有没有人遇到过这个,或者可以指出我的相关信息?
【问题讨论】:
-
他们的措辞对我来说也很难理解......我将其解读为 - 使用 Rails 系统测试 - 即在 test/system 下 - 或至少继承自
ActionDispatch::SystemTest。我在这里写下了我的经历:dev.to/dstull/… -
感谢@dstull,实际上您的文章已经成为一个有用的参考!我已成功切换到系统测试,一切正常。现在我正在尝试优化,并希望从我的设置中删除 Database Cleaner 依赖项。但不确定我是否理解错了,这是否仍然需要!
-
实际上是系统规格!我正在使用 rspec
标签: ruby-on-rails rspec ruby-on-rails-5 database-cleaner