2

我仍在尝试解决这个问题中概述的基本问题:Rails Phantomjs, poltergeist, and Capybara not playing well together

基本上我的所有测试都运行良好,但我无法从我的 rspec 测试中使用 PhantomJS / Poltergeist / Capybara 获得有效的屏幕渲染。

使用@theSociable.me 提供的小脚本(如果我单独运行该测试),我可以通过 Poltergeist/Capbybara 获得我的一个屏幕的渲染!伟大的!

但是,当我将行include Capybara::DSL添加到我的测试中时,它们都开始失败并出现以下错误:

 Failure/Error: visit signin_path
     ActionView::Template::Error:
       wrong number of arguments (0 for 1)

其中,如果我遵循回溯:

# ./app/models/user.rb:118:in `authenticate_with_salt'
# ./app/helpers/sessions_helper.rb:67:in `user_from_remember_token'
# ./app/helpers/sessions_helper.rb:25:in `current_user'
# ./app/helpers/sessions_helper.rb:31:in `signed_in?'
# ./app/views/layouts/_header.html.erb:9:in `_app_views_layouts__header_html_erb__1456931984656374710_70286761365040'
# ./app/views/layouts/application.html.erb:12:in `_app_views_layouts_application_html_erb___847298267570209394_70286745935080'
# ./spec/requests/parties_spec.rb:22:in `block (2 levels) in <top (required)>'

我的访问 signin_path行似乎有问题

..任何想法为什么将 Capybara::DSL 包含到我的项目中突然导致所有这些围绕身份验证/登录的大规模失败?

谢谢!

4

1 回答 1

1

戴夫,我必须查看您的请求规范的内容,但很可能您正在运行 Capybara 2.x,这需要将集成规范放在里面spec/features而不是spec/requests.

spec/requests现在保留用于 API 测试(直接 GET 请求、状态代码和重定向断言等),这就是它不会自动接收 Capybara DSL 的原因——而放置在其中的任何规范spec/features都可以。

我们在尝试将 Capybara DSL 的访问权限授予我们的请求规范时遇到了类似的问题,因为我们需要这样做(尽管我不相信这是一个好主意)。这是我最终得到的解决方案,它对我们有用。

您需要将其包含在 RSpec 配置块中,而不是将 Capybara DSL 包含在全局范围内,如下所示:

# spec/spec_helper.rb
RSpec.configure do |config|
  config.include Capybara::DSL, type: :request
end

type: :request部分确保 DSL 仅包含在与此特定类型匹配的测试中,基于我相信的目录结构。这似乎不会干扰其他可以访问 Capybara DSL 的测试(例如功能规范)。

希望它能解决你的问题。

于 2013-03-28T20:06:19.597 回答