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 告诉你你的应用主页坏了,因为它坏了。