为什么我的 RSpec + Capybara 测试无法呈现视图?
Why is my RSpec + Capybara test failing to render view?
我使用 wicked (1.3.1)(不确定是否相关)作为我的 rails 5 应用程序的入职流程。在我的入职流程的最后一步,有一个 <a>
link 导航到 user#dashboard page
。
这在所有浏览器中都可以正常工作。由于某种原因,转换在 Capybara 中不起作用(rspec 3.7,rspec-rails 3.7.2,Capybara 2.14)。 url 将自动浏览器更改为所需的路由,但页面不呈现任何内容,它保留旧视图。从视觉上看,就好像有人输入了 url 但没有按 return,但是,当我调试它们时,控制器方法和视图正在被触及。它们看起来 return 一个渲染,但在浏览器中没有渲染值
如果我在 <a>
单击后在测试中睡眠,我可以手动单击 url 栏,按 return(导航到正确的 url) 然后页面将呈现。但不是靠自己。有人以前经历过吗?
我已经尝试将 href 更改为不同的路径,以查看它是否是目标 view/controller 的问题 - 它不是,我尝试的所有路径都会发生。我还尝试了不同的水豚驱动程序::selenium
、:chrome
、:poltergeist
。结果都一样!
很想提供更多详细信息,但我不确定要显示什么。它是一个简单的 href,我不确定会出现什么问题。
干杯
编辑:
原来日志中有错误。将更新解决方案。
错误:
Could not log "render_template.action_view" event. NoMethodError: undefined method `render_views?' for RSpec::ExampleGroups::LayoutsSplash::View:Class ["/Users/mitchellmeyer/.rvm/gems/ruby-2.3.1/gems/rspec-core-3.6.0/lib/rspec/core/example_group.rb:732:in `method_missing'",
日志中显示的错误是已知的 rspec/rspec-rails 3.6 问题 - 升级将解决该问题。除此之外,当 URL 手动提交到浏览器时它起作用,但在单击 link 时不起作用,这表明 link 可能受到 JS 的干扰。最有可能的是 Turbolinks,您可以通过向 link 添加 data-turbolinks=“false”
属性来针对给定的 link 禁用它。如果这修复了行为(你声明它确实如此),那么你的一个文件中可能有 JS 错误。检查浏览器中的开发人员控制台是否显示任何错误并修复它们。
既然你提到了 Poltergeist,作为你尝试过的驱动程序,在你的问题中,可能会出现静默错误,导致 JS 在使用它时失败,因为它不支持 ES 5.1 以外的任何东西,所以它不是真的更适合测试现代网络应用程序,如果您需要无头测试,我建议坚持使用无头 chrome。
我使用 wicked (1.3.1)(不确定是否相关)作为我的 rails 5 应用程序的入职流程。在我的入职流程的最后一步,有一个 <a>
link 导航到 user#dashboard page
。
这在所有浏览器中都可以正常工作。由于某种原因,转换在 Capybara 中不起作用(rspec 3.7,rspec-rails 3.7.2,Capybara 2.14)。 url 将自动浏览器更改为所需的路由,但页面不呈现任何内容,它保留旧视图。从视觉上看,就好像有人输入了 url 但没有按 return,但是,当我调试它们时,控制器方法和视图正在被触及。它们看起来 return 一个渲染,但在浏览器中没有渲染值
如果我在 <a>
单击后在测试中睡眠,我可以手动单击 url 栏,按 return(导航到正确的 url) 然后页面将呈现。但不是靠自己。有人以前经历过吗?
我已经尝试将 href 更改为不同的路径,以查看它是否是目标 view/controller 的问题 - 它不是,我尝试的所有路径都会发生。我还尝试了不同的水豚驱动程序::selenium
、:chrome
、:poltergeist
。结果都一样!
很想提供更多详细信息,但我不确定要显示什么。它是一个简单的 href,我不确定会出现什么问题。
干杯
编辑: 原来日志中有错误。将更新解决方案。
错误:
Could not log "render_template.action_view" event. NoMethodError: undefined method `render_views?' for RSpec::ExampleGroups::LayoutsSplash::View:Class ["/Users/mitchellmeyer/.rvm/gems/ruby-2.3.1/gems/rspec-core-3.6.0/lib/rspec/core/example_group.rb:732:in `method_missing'",
日志中显示的错误是已知的 rspec/rspec-rails 3.6 问题 - 升级将解决该问题。除此之外,当 URL 手动提交到浏览器时它起作用,但在单击 link 时不起作用,这表明 link 可能受到 JS 的干扰。最有可能的是 Turbolinks,您可以通过向 link 添加 data-turbolinks=“false”
属性来针对给定的 link 禁用它。如果这修复了行为(你声明它确实如此),那么你的一个文件中可能有 JS 错误。检查浏览器中的开发人员控制台是否显示任何错误并修复它们。
既然你提到了 Poltergeist,作为你尝试过的驱动程序,在你的问题中,可能会出现静默错误,导致 JS 在使用它时失败,因为它不支持 ES 5.1 以外的任何东西,所以它不是真的更适合测试现代网络应用程序,如果您需要无头测试,我建议坚持使用无头 chrome。