【问题标题】:Ruby on Rails App Testing with Rspec and Capybara使用 Rspec 和 Capybara 进行 Ruby on Rails 应用程序测试
【发布时间】:2016-04-28 18:38:54
【问题描述】:

当我为我的应用程序创建功能测试时,出现以下错误:

 ActionController::RoutingError:
   No route matches [GET] "/example"

我的应用程序在这些子域中使用子域和子应用程序(引擎/模块)。现在,当我通过 feature_subdomain_helper 为 Capybara 设置 app_host 或 default_host 时

Capybara.app_host = "example.lvh.me" or
Capybara.default_host = "example.lvh.me"

并在我的 rails_helper.rb 中添加以下代码行

  config.extend SubdomainHelpers, type: :feature

我得到同样的错误。现在我认为我的功能测试没有考虑配置的子域。

我的 Rspec 版本是:3.2 而Capybara版本是:2.4.4

我的示例功能测试如下所示:

require 'rails_helper'
feature 'Example Page' do

  scenario 'visit example page' do

    visit "/example"

    expect(page).to have_content 'Example'
  end
end

有人知道我做错了什么吗?

编辑: 主应用路由:

constraints(Subdomain) do
  mount Example::Engine => '/', as: 'example'
end

引擎路线:

Example::Engine.routes.draw do

  scope '/example', nav_scope: 'example' do
  end
end

【问题讨论】:

  • 你的 routes.rb 是什么样子的?
  • 添加路线条目//已编辑

标签: ruby-on-rails-4 rspec capybara subdomain rspec-rails


【解决方案1】:

Capybara.default_host 和 Capybara.app_host 的名称有点误导,因为它们都需要设置为 URL 才能正常运行

Capybara.default_host = "http://example.lvh.me"

如果这不能解决您的问题,请检查 rake routes 并确保您认为安装在 '/example' 的操作确实如此。

【讨论】:

  • 路由存在并挂载在'/example'。并且当设置了 default_host 和 app_host 或仅 on 时。这就是为什么我不明白这个问题的原因。
  • @puQ 您是否将您的 app_host 和 default_host 设置修复为 URL,而不仅仅是我在回答中提到的主机名?这有什么不同吗?
  • 是的,我已将我的 app_host/default_host 设置修复为 URL。结果是同样的错误
  • @puQ 如果路线确实存在于正确的位置并且您的水豚设置正确,那么我认为剩下的唯一选择是您的代码未正确提取子域约束中的子域
  • 但在生产中,子域约束一切正常。只有测试用例是“错误的”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多