3

で Cookie を設定する Web ページがありdocument.cookie = value、サーバー上での実行中に完全に機能します。

ただし、キュウリのテスト (Poltergeist/PhantomJS を使用) では、Cookie はページ間で保持されません。

テスト フローは次のとおりです。

  1. ページAが開きます
  2. ユーザーがボタンをクリックすると、JS がトリガーされて Cookie が設定されます
  3. ユーザーがページ B へのリンクをクリックする
  4. ページ B には、Cookie の値を反映するコンポーネントがあります

実行中のサーバーに対する実際のブラウザーでは問題ありません。

しかし、cucumber では、ステップ 4 の表示で、空の Cookie が表示されていることがわかります。

これを修正または調査する方法を知っている人はいますか?

4

1 に答える 1

6

他のページから悪いアドバイスを受け取ったことが判明しました。これは、実際にはポルターガイストの自然な動作を妨げていました。

私はそのがらくたを取り除きました、そしてポルターガイストは働きました。それ以来、テストで Cookie を設定するより良い代替方法を実装しましたが、すべて問題ありません。

一般的な要求により、テスト ステップの Cookie セッター コードは次のとおりです。

case Capybara.current_session.driver
when Capybara::Poltergeist::Driver
  page.driver.set_cookie(k,v)
when Capybara::RackTest::Driver
  headers = {}
  Rack::Utils.set_cookie_header!(headers,k,v)
  cookie_string = headers['Set-Cookie']
  Capybara.current_session.driver.browser.set_cookie(cookie_string)
when Capybara::Selenium::Driver
  page.driver.browser.manage.add_cookie(:name=>k, :value=>v)
else
  raise "no cookie-setter implemented for driver #{Capybara.current_session.driver.class.name}"
end

重要な警告:上記のコードを使用してテスト ステップで Cookie を設定すると、ページの Javascript で上書きが許可されない可能性があります。テストでページで Cookie を変更する必要がある場合、Cookie が変更されないことがあります。

于 2013-06-21T19:17:37.060 に答える