ruby-on-rails - Capybara 特性测试不提交数据库事务

标签 ruby-on-rails database rspec capybara

我正在使用 Machinist 创建我的测试用户,我想在使用 Capybara 运行的每次测试之前登录这些用户:

include Capybara::DSL
include ActionController::UrlWriter

before do
  SslRequirement.disable_ssl_check = true
  user = User.make


  visit new_user_session_path
  fill_in('username', with: user.email)
  fill_in('password', with: '12345')
  click_button('submit')
end

it "responds as expected" do
   # ...
end

现在,当使用 User.make 创建用户时,我可以通过 User.all 访问它,而事实上它还没有保存在数据库中,这是因为

ActiveRecord::Base.connection.open_transactions == 1

我可以通过做一个

来修复/破解这个
ActiveRecord::Base.connection.commit_db_transaction

User.make 之后,但我宁愿正确地修复它。这是我缺少的 Capybara 配置吗?免责声明:使用 Rails 2.3RSpec 1.3

最佳答案

您没有显示您在 Capybara 中使用的是哪个驱动程序,但通常您不应该在使用 Capybara 时使用事务进行测试(是的,有潜在的变通方法允许它,但它们都有副作用)。参见 transactions and database setup然后通过截断查看 database_cleaner gem - 这是一篇关于它的博客文章,它应该适合你使用的 gems - http://devblog.avdi.org/2012/08/31/configuring-database_cleaner-with-rails-rspec-capybara-and-selenium/

关于ruby-on-rails - Capybara 特性测试不提交数据库事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33551323/

相关文章:

ruby-on-rails - Paypal Express ActiveMerchant 集成

ruby-on-rails - 我可以在服务对象中包含辅助方法吗?

php - 在 while 循环中访问第二个表

ruby-on-rails - Rspec:我如何测试可选字段

ruby-on-rails - 一起模拟 rspec 和 mocha

ruby-on-rails - Redis 如何管理未使用的缓存键?

javascript - 当通过 AJAX 呈现表单时,jQuery 代码不适用于表单

php - 如何动态地将 NULL 插入 postgres 表中?

sql - 主/外键与没有主键的单表的性能

ruby-on-rails - "[Class_Name] must exist"rails 5 rspec 测试协会