Capybara功能测试不提交数据库事务

时间:2015-11-05 17:43:32

标签: 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

1 个答案:

答案 0 :(得分:2)

您没有显示您在使用Capybara时使用的驱动程序,但通常在使用Capybara时不应使用事务进行测试(是的,有可能的解决办法允许它,但它们都有副作用)。请参阅transactions and database setup,然后查看带有截断的database_cleaner gem - 这是一篇关于它的博客文章,应该与你正在使用的宝石时代有关 - http://devblog.avdi.org/2012/08/31/configuring-database_cleaner-with-rails-rspec-capybara-and-selenium/