首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >切换Capybara默认驱动程序后401个错误?

切换Capybara默认驱动程序后401个错误?
EN

Stack Overflow用户
提问于 2015-12-01 16:38:36
回答 2查看 514关注 0票数 0

我正在为一个使用Capybara和RSpec的现有Rails应用程序组装一个Rails应用程序。默认情况下,Capybara使用rack_test作为驱动程序,但我想使用capybara-webkit。

我已经做了一个简单的测试来登录我的网站。使用rack_test,我可以登录,我的log/test.log文件显示了以下HTTP请求:

代码语言:javascript
复制
Completed 200 OK in 201ms (Views: 201.3ms | ActiveRecord: 0.0ms)
Started POST "/users/sign_in" for 127.0.0.1 at 2015-12-01 10:20:33 -0600
Processing by Devise::SessionsController#create as HTML
  Parameters: {"utf8"=>"✓", "user"=>{"email"=>"foo@bar.com", "password"=>"[FILTERED]", "remember_me"=>"0"}, "commit"=>"Sign In"}
  User Load (0.5ms)  SELECT  "users".* FROM "users"  WHERE "users"."email" = 'foo@bar.com'  ORDER BY "users"."id" ASC LIMIT 1
   # There are a few more SQL queries here that I've removed
Redirected to http://www.example.com/
Completed 302 Found in 36ms (ActiveRecord: 2.3ms)
Started GET "/" for 127.0.0.1 at 2015-12-01 10:20:33 -0600
Processing by InitiativesController#blank as HTML

当我切换到webkit (通过在Capybara.default_driver :webkit中设置spec_helper.rb)时,我在运行这个测试时遇到了问题。由于某些原因,我在日志中看到401个错误:

代码语言:javascript
复制
Completed 200 OK in 17ms (Views: 16.7ms | ActiveRecord: 0.0ms)
Started POST "/users/sign_in" for 127.0.0.1 at 2015-12-01 10:21:31 -0600
Processing by Devise::SessionsController#create as HTML
  Parameters: {"utf8"=>"✓", "user"=>{"email"=>"foo@bar.com", "password"=>"[FILTERED]", "remember_me"=>"0"}, "commit"=>"Sign In"}
  User Load (0.7ms)  SELECT  "users".* FROM "users"  WHERE "users"."email" = 'foo@bar.com'  ORDER BY "users"."id" ASC LIMIT 1
  # no other queries
Completed 401 Unauthorized in 5ms
Processing by Devise::SessionsController#new as HTML

因此,登录请求不被接受。是否有某种Capybara的配置,我需要改变,以使这个日志在请求工作?我不知道是什么导致了这一切。

我的spec_helper.rb看起来是这样的:

代码语言:javascript
复制
require 'simplecov'
require 'webmock/rspec'
require 'capybara/rspec'
require 'fakeredis/rspec'
require 'site_prism'

ENV["RAILS_ENV"] ||= 'test'
require File.expand_path("../../config/environment", __FILE__)
require 'rspec/rails'
require 'rspec/autorun'

Dir[Rails.root.join("spec/support/**/*.rb")].each { |f| require f }

Capybara.javascript_driver = :poltergeist
Capybara.default_driver = :webkit
Capybara.default_host = 'http://127.0.0.1:60400'
Capybara.server_port = 60400

ActiveRecord::Migration.check_pending! if defined?(ActiveRecord::Migration)

Capybara::Webkit.configure do |config|
  config.block_unknown_urls
end

RSpec.configure do |config|
  config.fixture_path = "#{::Rails.root}/spec/fixtures"

  config.infer_base_class_for_anonymous_controllers = false

  config.include Devise::TestHelpers, :type => [:controller, :acceptance]

  config.use_transactional_fixtures = false

  config.before(:suite) do
    DatabaseCleaner.clean_with(:truncation)
  end

  config.before(:each) do |example|
    DatabaseCleaner.strategy = :truncation 
    DatabaseCleaner.start
  end

  config.after(:each) do
    DatabaseCleaner.clean
  end

  config.order = "random"

  config.before(:all) do
    FactoryGirl.reload
  end

  config.before :each do
    Timecop.return
  end

  config.include Helpers
  config.include Helpers::MassAdsCreation
end

WebMock.disable_net_connect!(allow_localhost: true)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-12-04 19:50:54

我认为您可能需要使用Warden::Test::Helpers而不是如前所述

请注意,它们也有一个处理capybara-webkit的特定部分。

票数 1
EN

Stack Overflow用户

发布于 2015-12-01 17:52:28

401可能意味着密码与您登录的电子邮件不匹配。由于它适用于rack_test,而不是capybara-webkit,所以很可能您仍然在使用基于事务的测试。

当使用rack_test时,应用程序与测试在同一个线程中运行,这意味着它们都使用相同的数据库连接。因此,您可以使用基于事务的测试,而不必支付实际向数据库写入任何内容所带来的性能损失。然而,当使用任何“真正的浏览器”驱动时,Capybara会在它自己的线程中启动您的应用程序,这意味着测试和应用程序使用的是单独的数据库连接,因此您必须实际提交到数据库。这通常通过在截断模式下使用database_cleaner来完成。请参阅清洗剂#rspec与水豚-示例

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34025399

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档