Capybara-webkit 意外行为 url 路由,returns 空白页

Capybara-webkit unexpected behavior with url routes, returns blank page

我在使用 Capybara-webkit 时遇到问题。像这样的简单示例代码应该显示登录页面失败:

feature 'user signs in' do
  scenario 'sign in successfully', js: true do
    user = create(:user)

    visit new_user_session_url
    expect(page).to have_text 'Sign in'
  end
end

给出失败信息:

Failure/Error: expect(page).to have_text 'Sign in'
    expected to find text "Sign in" in ""

save_and_open_page 显示空白页 <body></body>。如果删除 js: true,一切正常。

我知道此规范不需要设置 js。但是依赖于 javascript 的规范也失败了。所以这只是一个示例规范。

有人能解释为什么 Capybara-webkit 会这样吗?这是正常现象、问题还是我设置不正确?

[注] 该应用程序使用子域。会不会是 Capybara-webkit 不能很好地处理子域?

您是否在测试环境中设置了 config.action_controller.default_url_options(通常是 test.rb)。 url 帮助程序使用此处指定的主机来构建 url,并且需要是解析为接口水豚的主机名是 运行 测试应用程序(通常为 127.0 .0.1) - 您可以通过查看 new_user_session_url 在您的测试代码中返回的内容来检查这一点。

问题出在我自己的错误上。在我的控制器中,我正在使用 request.subdomains 检查 request.url 附带的子域。此 returns 子域数组出现在 url 中的 host 之前。

在我的测试中,我存根 ActionDispatch::Request 以接受 :subdomains 方法并使用提供的子域进行响应。然后,它可以在控制器中进行验证。

因为有些地方我在路由 url 中即时设置了 subdomain 属性,所以我对 request.subdomain 设置了不同的值(新的设置在 url) 和 request.subdomains(在 url 中设置一个之前的旧的)。所以我决定使用新的并将其与 .split('.') 分开,因为这是我需要使用的。

更改后,我忘记更新规范中的存根以将请求方法更改为 subdomain

修改后一切正常

我希望这对面临同样问题的任何人有所帮助。至少它会提醒他们更新所有存根(如果有的话)。

[更新] 显然,我为 2 子域方法获得不同值的原因是因为规范中的存根。