Ruby on rails 使用selenium作为webdriver的Rails集成测试-can';不要登录

Ruby on rails 使用selenium作为webdriver的Rails集成测试-can';不要登录,ruby-on-rails,selenium,integration-testing,Ruby On Rails,Selenium,Integration Testing,你好 我有一个非常简单的集成测试 require 'integration_test_helper' Capybara.current_driver = :rack_test class AdminSignsInTest < ActionDispatch::IntegrationTest test 'can sign in' do email = 'bob@example.com' password = 'secret_password' Admin.cre

你好
我有一个非常简单的集成测试

require 'integration_test_helper'
Capybara.current_driver = :rack_test

class AdminSignsInTest < ActionDispatch::IntegrationTest

  test 'can sign in' do
    email = 'bob@example.com'
    password = 'secret_password'
    Admin.create email: email, password: password

    visit new_admin_session_path
    fill_in 'admin_email', with: email
    fill_in 'admin_password', with: password

    click_button I18n.t('devise.views.sign_in')

    assert_equal I18n.t('devise.sessions.signed_in'), find('p.notice').text
  end
end
需要“集成\测试\助手”
当前驱动程序=:机架测试
类AdminSignsTest
当我将Capybara驱动程序设置为
rack\u test
test passes时,但当我将其设置为
selenium
时,由于登录页面上的“无效电子邮件或密码”而失败(我使用的是designe)。我做错了什么

当我将Capybara驱动程序设置为rack_test passes时,但当我将其设置为selenium时,由于登录页面上的“无效电子邮件或密码”而失败(我正在使用Desive)。我做错了什么

您必须检查
使用事务性装置
。使用事务性装置时,因为Selenium(或任何外部驱动程序,不是
Rack::Test
)无法访问已写入数据库的信息。(由于交易尚未“提交”)

您可以在
test\u helper.rb
中解决此问题,方法如下:

class ActionDispatch::IntegrationTest
  self.use_transactional_fixtures = false
end
同时,您可能希望了解,如果没有事务固定装置,您的数据库将变得不整洁。

来自:

您还需要DatabaseCleaner,因为事务性装置不适用于Selenium。将数据库_cleaner gem添加到Gemfile的:测试组,并将以下代码放入spec/support/database_cleaner.rb中:

DatabaseCleaner.strategy = :truncation

RSpec.configure do |config|
  config.use_transactional_fixtures = false
  config.before :each do
    DatabaseCleaner.start
  end
  config.after :each do
    DatabaseCleaner.clean
  end
end

我发现mattwinder的答案是有效的,但我也不得不对这句话进行评论

config.use\u transactional\u fixtures=true


也在spec/spec_helper.rb中。仅仅在spec/support/database_cleaner.rb中覆盖它不足以让登录使用Selenium。

很抱歉,我忘记了这个问题。这个问题已经不存在了。我花了一些时间试图修复它,发布了这个问题,第二天它就正常工作了。可能是忘了重启斯波克之类的蠢事。我应该试着删除这个问题吗?你是对的,那肯定是因为事务性问题。我正在使用共享连接黑客。除非你有任何异议,否则我很感激你的接受,我的回答仍然会帮助那些遭受类似问题的人。谢谢你,天哪!设置
config.use\u transactional\u fixtures=false
将其修复,以便我可以运行selenium以及正常的Rack::测试。快乐地运行Rspec/Capybara:Selenium和Device/Warden login now(不必使用designe登录表单,而是使用Warden login_as()助手,以实现更快的测试。谢谢!请参阅Avdi Grimm的文章: