2

私はまだこの質問で概説されている根本的な問題を解決しようとしています: Rails Phantomjs、ポルターガイスト、およびカピバラがうまく連携していない

基本的にすべてのテストは正常に実行されていますが、rspec テストから PhantomJS / Poltergeist / Capybara を使用して画面の有効なレンダリングを取得できません。

@theSociable.me から提供された小さなスクリプトを使用して (そのテストを単独で実行した場合) 、Poltergeist/Capbybara を介して画面の 1 つのレンダリングを取得できます。すごい!

ただし、行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

デイブ、リクエスト仕様の内容を確認する必要がありますが、統合仕様を ではspec/featuresなくの内部に配置する必要がある Capybara 2.x を実行している可能性がありますspec/requests

spec/requestsは API テスト (ダイレクト GET リクエスト、ステータス コード、リダイレクト アサーションなど) 用に予約されています。そのため、Capybara DSL を自動的に受信しませんspec/features

必要なため、要求仕様に Capybara DSL へのアクセスを許可しようとしたときに、同様の問題が発生しました (ただし、それが良いアイデアであるとはまだ確信していません)。これが私が最終的に得た解決策であり、私たちにとってはうまくいきました。

Capybara DSL をグローバル スコープに含める代わりに、次のように RSpec 構成ブロック内に含める必要があります。

# 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 に答える