用selenium作为webdriver的Rails集成测试 - 无法sign_in

Art*_*rov 25 selenium integration-testing ruby-on-rails

嗨,
我有一个非常简单的集成测试

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
Run Code Online (Sandbox Code Playgroud)

当我将Capybara驱动程序设置为rack_test测试通行证时,但是当我将其设置为时selenium,它会因"电子邮件或密码无效"而失败.在登录页面上(我正在使用Devise).我究竟做错了什么?

Lee*_*ley 37

当我将Capybara驱动程序设置为rack_test测试通行证时,但当我将其设置为selenium时,它会因"电子邮件或密码无效"而失败.在登录页面上(我正在使用Devise).我究竟做错了什么?

你必须检查use_transactional_fixtures.使用事务性装置时,因为Selenium(或任何外部驱动程序,不是Rack::Test)不能访问已写入数据库的信息.(因为交易尚未"承诺")

您可以test_helper.rb使用以下内容解决此问题:

class ActionDispatch::IntegrationTest
  self.use_transactional_fixtures = false
end
Run Code Online (Sandbox Code Playgroud)

您可能希望同时查看类似数据库清理器的内容,因为没有事务夹具,您的数据库将变得不整洁.

  • 除非你有任何异议,否则我会欣赏*Accept*,我的回答仍然可以帮助遇到类似问题的人. (4认同)

mat*_*wer 9

来自http://opinionatedprogrammer.com/2011/02/capybara-and-selenium-with-rspec-and-rails-3/:

您还需要DatabaseCleaner,因为事务夹具不能与Selenium一起使用.将database_cleaner gem添加到Gemfile的:test组,并将以下代码放入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
Run Code Online (Sandbox Code Playgroud)