Chromedriver 被测试数据库拒绝

问题描述 投票:0回答:1

我正在尝试为 2017 Rails 项目编写 Rspec 测试。它使用 Capybara、FactoryBot 和 Devise。

我正在使用 Chromedriver,它在第一次 Rspec 系统测试期间无法登录用户 - Chrome 浏览器会弹出凭据错误的引导警报。

我已确认用户确实位于测试数据库中,并且使用绑定.pry 具有正确的凭据。

如果我不使用驱动程序(即,如果我从场景中取出 :js => true),它会正常记录用户。

我已经安装了webdrivers gem,它正在运行chromedriver 114.0.5735.90,在rails_helper中有这个:

Capybara.register_driver :selenium_chrome do |app|
  Capybara::Selenium::Driver.new(app, browser: :chrome)
end

Capybara.default_driver = :selenium_chrome
Capybara.javascript_driver = :selenium_chrome

# ... this to test if running parallel etc.  Didn't help
Capybara.run_server = true 
Capybara.server_port = 7000
Capybara.app_host = "http://localhost:#{Capybara.server_port}" 

应用程序.rb

require 'webdrivers/chromedriver'
Webdrivers::Chromedriver.required_version = "114.0.5735.90"

测试.log

Completed 401 Unauthorized in 9ms (ActiveRecord: 2.4ms)
Processing by Devise::SessionsController#new as HTML
  Parameters: {"utf8"=>"✓", "fan"=>{"email"=>"[email protected]", "password"=>"[FILTERED]", "remember_me"=>"0"}, "commit"=>"Sign in"}

宝石


gem 'rails', '>= 5.0.1.rc2', '< 5.1'

group :development, :test do
  # Call 'byebug' anywhere in the code to stop execution and get a debugger console
  gem 'byebug', platform: :mri
  gem 'rspec-rails', '~> 3.5.0'
  gem 'puma', '~> 3.0'
end

group :test do
  gem 'capybara', '~> 3.6.0'
  gem 'factory_girl_rails', '~> 4.7'
  gem 'faker'
  gem 'selenium-webdriver', '~> 3.6.0'
  gem "database_cleaner", "~> 1.5"
  gem 'shoulda-matchers', '~> 3.1'
  gem 'launchy'
end

...我尝试使用 geckodriver 代替,但出现此错误:

Failures:

  1) Splash and devise: Fans in Canada can sign in, visit signed in home page, and log out in
     Failure/Error: click_link('LOG IN')
     
     Selenium::WebDriver::Error::UnknownError:
       Invalid Content-Type
ruby-on-rails rspec devise selenium-chromedriver capybara
1个回答
0
投票

你正在针对同一问题创建多个问题,这肯定会让你自己被 stackoverflow 淘汰。您还跳到似乎没有任何逻辑基础的假设,例如这是一个 chromedriver 问题。

鉴于所提供的信息

  1. 为什么要手动设置Capybara.server端口?如果您没有充分的理由这样做,请将其删除。
  2. 为什么要设置Capybara.app_host,同#1。
  3. I have confirmed the user is indeed in test database, and with the correct credentials using binding.pry.
    -- 你把绑定.pry 放在哪里了?是在测试代码中还是在应用程序代码中?你是直接连接DB看里面有没有记录吗
  4. 当使用 selenium 运行 Capybara 时,会发生多种情况 a) Capybara 在一个线程中运行应用程序 - 该线程有自己的数据库连接。 b) 测试在另一个线程中运行,并且有自己的数据库连接 c) 浏览器在自己的进程中运行并连接到被测应用程序 考虑到这些事情,有几种可能性
    1. 您正在事务模式下运行,这意味着在测试线程中创建的记录对应用程序不可见 - 在测试暂停时直接连接到数据库(在 ruby 之外)并检查记录是否实际上已提交到数据库会验证
    2. 您的应用程序实际上并未连接到您的测试所在的数据库 - 其他哪些默认配置已更改?
    3. 您告诉浏览器连接到针对不同数据库运行的完全不同的应用程序实例(可能是开发实例?) - 因此建议停止覆盖 Capybaras 设置并让它做它的事情。您是否观察过浏览器并看到它会访问什么网址?查看浏览器控制台并查看它将登录凭据发布到的位置等?

如果您将正在使用的软件版本更新到现代水平,这一切都会变得更容易。例如,较新的 Rails 将共享测试和应用程序之间的数据库连接,允许在事务模式下运行,并在大多数情况下消除对数据库清理程序等的需要 - 简化设置

© www.soinside.com 2019 - 2024. All rights reserved.