RSpec - Capybara 和 Puma - 路由错误
RSpec - Capybara and Puma - Routing Error
我正在尝试将 Capybara 用作前端测试套件 (Vue),但我从 Puma 收到以下错误:
Failure/Error: raise ActionController::RoutingError, "No route matches [#{env['REQUEST_METHOD']}] #{env['PATH_INFO'].inspect}"
ActionController::RoutingError:
No route matches [GET] "/login"
这是什么原因,我该如何解决?跟配置有关系吗?让我知道我是否应该在我的问题中包含更多代码。
rails_helper.rb:
ENV['RAILS_ENV'] ||= 'test'
require File.expand_path('../../config/environment', __FILE__)
abort("The Rails environment is running in production mode!") if Rails.env.production?
require 'spec_helper'
require 'rspec/rails'
require "pundit/rspec"
require "capybara/rails"
require "capybara/rspec"
require "capybara/poltergeist"
require 'database_cleaner'
require 'factory_girl'
require 'shoulda/matchers'
require "paperclip/matchers"
require 'support/spec_helpers/warden_controller_helpers'
require 'webmock/rspec'
require 'support/spec_helpers/webmock_helper'
Capybara.javascript_driver = :poltergeist
login_spec.rb:
require 'rails_helper'
RSpec.feature "User login", type: :feature, js: true do
before :each do
@user = User.create!(
first_name: "Bob",
last_name: "Brown",
email: "bob@email.com",
password: "bob1",
has_accepted_terms: true
)
end
scenario "User logs in with correct credentials" do
visit root_path
save_screenshot
click_on 'Log In'
sleep 1
save_screenshot
end
end
因此,如果我 运行 开发服务器并转到 'localhost:3000
(这基本上就是你告诉 Capybara 要做的)然后 'Log In' link 在指向应用程序不处理的 app.localhost:3000/login
的页面上。这是因为访问没有 app
子域的 URL 使用 application.html.haml
布局,其中不包含 JS(因此没有 Vue 路由器来处理 /login
路径)。但是,如果我在浏览器中转到 app.localhost:3000
,那么会有一个页面可以正常工作 Log In
link 因为所有 JS 都加载到该页面(包括 Vue 路由器),因为它使用 app.html.haml
布局(BaseController)
您需要修复主主页 link 才能正常运行 and/or 配置 Capybara 默认连接到 app
子域
Capybara.app_host = 'http://app.localhost' # hostname with ‘app’ sub domain that resolves to interface the AUT is being run on
Capybara.always_include_port = true
基本上 Capybaras 告诉你你的应用主页坏了,因为它坏了。
我正在尝试将 Capybara 用作前端测试套件 (Vue),但我从 Puma 收到以下错误:
Failure/Error: raise ActionController::RoutingError, "No route matches [#{env['REQUEST_METHOD']}] #{env['PATH_INFO'].inspect}"
ActionController::RoutingError:
No route matches [GET] "/login"
这是什么原因,我该如何解决?跟配置有关系吗?让我知道我是否应该在我的问题中包含更多代码。
rails_helper.rb:
ENV['RAILS_ENV'] ||= 'test'
require File.expand_path('../../config/environment', __FILE__)
abort("The Rails environment is running in production mode!") if Rails.env.production?
require 'spec_helper'
require 'rspec/rails'
require "pundit/rspec"
require "capybara/rails"
require "capybara/rspec"
require "capybara/poltergeist"
require 'database_cleaner'
require 'factory_girl'
require 'shoulda/matchers'
require "paperclip/matchers"
require 'support/spec_helpers/warden_controller_helpers'
require 'webmock/rspec'
require 'support/spec_helpers/webmock_helper'
Capybara.javascript_driver = :poltergeist
login_spec.rb:
require 'rails_helper'
RSpec.feature "User login", type: :feature, js: true do
before :each do
@user = User.create!(
first_name: "Bob",
last_name: "Brown",
email: "bob@email.com",
password: "bob1",
has_accepted_terms: true
)
end
scenario "User logs in with correct credentials" do
visit root_path
save_screenshot
click_on 'Log In'
sleep 1
save_screenshot
end
end
因此,如果我 运行 开发服务器并转到 'localhost:3000
(这基本上就是你告诉 Capybara 要做的)然后 'Log In' link 在指向应用程序不处理的 app.localhost:3000/login
的页面上。这是因为访问没有 app
子域的 URL 使用 application.html.haml
布局,其中不包含 JS(因此没有 Vue 路由器来处理 /login
路径)。但是,如果我在浏览器中转到 app.localhost:3000
,那么会有一个页面可以正常工作 Log In
link 因为所有 JS 都加载到该页面(包括 Vue 路由器),因为它使用 app.html.haml
布局(BaseController)
您需要修复主主页 link 才能正常运行 and/or 配置 Capybara 默认连接到 app
子域
Capybara.app_host = 'http://app.localhost' # hostname with ‘app’ sub domain that resolves to interface the AUT is being run on
Capybara.always_include_port = true
基本上 Capybaras 告诉你你的应用主页坏了,因为它坏了。