ruby-on-rails - Capybara webkit 在 RSpec 测试中将我重定向到 example.com

标签 ruby-on-rails ruby rspec capybara capybara-webkit

我的 ruby​​ on rails 应用程序有一个 RSPec 测试套件,如下所示:

scenario "Buyer visits people you follow page" do
   ...do stuff
  end

  scenario "Buyer logs out" do
   ...do stuff
  end

  scenario "Buyer creates a new event", :js => true do
   ...do stuff
  end

在每个场景运行之前,后台 sign_in_as 模块运行:

module SignInHelpers
  def sign_in_as(user = FactoryGirl.create(:user))
    visit welcome_page_url
    save_and_open_page
    fill_in :user_email, with: user.email
    fill_in :user_password, with: "password"
    click_button "Log in"
  end
end

设置 :js=>true 的所有场景都可以正常工作。 “买家创建新事件”javascript 的场景很重要,所以我想使用我的 webkit 来启用 javascript 和 capybara page.execute_script 方法....测试失败:

Buyer Features Buyer creates a new event
     Failure/Error: sign_in_as
     Capybara::ElementNotFound:
       Unable to find field :user_email

这段代码在所有场景之前运行,并且在之前的8个测试中都有效,那么为什么现在失败了?

当我 save_and_open_page 时,我意识到测试以某种方式位于 example.com 上!为什么是这样?我觉得如果我找出原因 - 问题就解决了!

这是我的 spec_helper.rb:

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

Capybara.javascript_driver = :webkit

Capybara::Webkit.configure do |config|
  # Enable debug mode. Prints a log of everything the driver is doing.
  config.debug = false

  # By default, requests to outside domains (anything besides localhost) will
  # result in a warning. Several methods allow you to change this behavior.


  # Allow pages to make requests to any URL without issuing a warning.
  config.allow_unknown_urls

  # Allow a specifc domain without issuing a warning.
  config.allow_url("localhost")

  # Timeout if requests take longer than 5 seconds
  config.timeout = 10

  # Don't raise errors when SSL certificates can't be validated
  config.ignore_ssl_errors

end



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

  config.use_transactional_fixtures = true
  config.mock_with :rspec
  config.expect_with :rspec do |expectations|

    expectations.include_chain_clauses_in_custom_matcher_descriptions = true
  end

  config.mock_with :rspec do |mocks|

    mocks.verify_partial_doubles = true
  end


=begin

  config.filter_run :focus
  config.run_all_when_everything_filtered = true


  config.example_status_persistence_file_path = "spec/examples.txt"


  config.disable_monkey_patching!


  if config.files_to_run.one?

    config.default_formatter = 'doc'
  end


  config.profile_examples = 10


  config.order = :random


  Kernel.srand config.seed
=end
end

我假设问题与此处的某些内容或此处缺少的内容有关,但我无法解决!

**请求的路由文件**

Rails.application.routes.draw do
  resources :invitations

  post 'utilities/getUserLocation', to: 'utilities#getUserLocation'

  resources :geo_ip_request

  resources :events

  get 'sessions/quick', to: 'sessions#quickBuy', as: "quick_buy"
  get 'sessions/:id', to: 'sessions#show', as: "session"


  post 'sessions/quick', to: 'sessions#getSession'
  post 'sessions/checkin', to: 'sessions#checkin'

  resources :tests

  get '/search', to: 'search#search', as: "search_search"

  get 'welcome/index', as: "welcome_page"



  #get 'sessions/show/:id', to: 'sessions#show', as: "session_show"

  devise_for :users, path: "users", path_names: { sign_in: 'login', sign_out: 'logout', password: 'secret', confirmation: 'verification', unlock: 'unblock', sign_up: 'new/(:invitation_token)' }, controllers: {sessions: 'users/sessions', registrations: 'users/registrations',  :omniauth_callbacks => "users/omniauth_callbacks"}


#resources :users

devise_scope :user do 
 get '/users/:id', to: 'users#show', as: 'user'
end

get '/users/eventOwner/:id', to: 'users#showEventOwner', as: 'userShowEventOwner'

post  'events/:id', to: 'events#buyTicket'

get 'users/:id/connect', to: 'users#connect', as: "connect_users"

get 'users/confirm', to: 'users#confirm', as: "confirm_users"

get 'users/followers/:id', to:'users#show_followers', as: "show_followers"
get 'users/followees/:id', to:'users#show_followees', as: "show_followees"
post 'users/follow/:id', to: 'users#follow_user', as:"follow_user" 


   #add route to show users favourites collection

   get 'users/favourites/:id', to: 'users#show_favourites', as: 'show_favourites'
   post 'users/favourites/add', to: 'users#add_favourite', as: 'add_favourite'


   patch 'attendees', to: 'attendees#update', as: "update_attendees"

 #get 'users/:id', to: 'users/users#show'
 get 'charges/error', to: 'charges#error', as: "payment_error"
 get 'charges/:id', to: 'charges#show'
 post 'charges/:id', to: 'charges#show'
 post 'charges/', to: 'charges#show'
 get 'listings/:id', to: 'listings#index', as: "listings_index"
 get 'listings/allsales/:id', to: 'listings#all_sales', as: "listings_all_sales"
 get 'listings/allsessions/:id', to: 'listings#all_sessions', as: "listings_all_sessions"



  #ROOT IS LANDING BUT TO BE CHANGED ONCE WE LAUNCH
  root 'landing_page#index'

  #path for landing page

  get '/', to: 'landing_page#index' , as: "landing_page"

#paths for job spec pdfs - controller has click tracking so we can track download numbers
get 'landing_page/download/SEPDF', to: 'landing_page#downloadSEPDF', as: "downloadSEPDF"
get 'landing_page/download/DMPDF', to: 'landing_page#downloadDMPDF', as: "downloadDMPDF"
get 'landing_page/download/SEINTERN', to: 'landing_page#downloadSEInternPDF', as: "downloadSEInternPDF"
get 'landing_page/download/DMINTERN', to: 'landing_page#downloadDMInternPDF', as: "downloadDMInternPDF"

post '/welcome', to: 'welcome#setUserLocation', as: "ajax_Set_User_Location"


   #add route for internal metrics page

   get '/metrics', to: 'metrics#index', as: 'internal_metrics'

   #add route for customer management system

   get 'cms', to: 'customer_management_system#index', as: 'customer_management_system'


 end

根据 EXAMPLE.COM 的 GREP 建议更新 对 example.com 执行了 grep - 结果如下:

http://pastebin.com/WgcHcRAg

如您所见 - 源代码树中没有任何内容(除了一些与此问题无关的邮件 View 内容) - 但在 tmp 和 capybara 中有很多提及....所以这个 example.com 来自哪里?在我看来,它来自某个地方的 capybara 配置......

最佳答案

不要在访问时使用 url 助手,而是使用路径助手。

visit welcome_page_path

当您使用 url 助手时,rails 会添加到在其 default_url_options 设置中指定的任何主机和端口上。测试在没有 js: true 的情况下工作,因为 racktest 驱动程序忽略了主机名

关于ruby-on-rails - Capybara webkit 在 RSpec 测试中将我重定向到 example.com,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31271064/

相关文章:

javascript - Rails 4 : "//= require_tree ." in application. js 不包含我的 js 文件在/app/assets/javascripts

html - 如何与rails内嵌显示?

ruby - 在 Ruby 中为属性创建别名的最佳方法是什么?

ruby - gsub 的怪异之处

ruby-on-rails - heroku & devise 用户注册注册 Controller 错误

ruby-on-rails - 如何自定义事件管理布局?

ruby-on-rails - Rails - 处理 404 的任何奇特方法?

Ruby 的变量交换 : x, y = y,x -- 数组引用似乎更慢?

ruby-on-rails - 如何确保多对多双方的关系是唯一的

ruby - 我无法让 rspec 自动测试工作? ( ruby ,无导轨)