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 子域方法获得不同值的原因是因为规范中的存根。
我在使用 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 子域方法获得不同值的原因是因为规范中的存根。