8

Cookieの内容に基づいて変化する一般的なアプリケーションの動作があり、テストする必要があります。たとえば、ユーザーがサイトの法的条件に同意したことを示すCookieセットを持っていない場合は、T&Cページにリダイレクトする必要があります。

を使用して機能テストでCookieを設定できます

request.cookies["legal_accepted"] = "yes"

ただし、これは統合テストでは機能しません。使用するリクエストオブジェクトはありません。これがなぜそうなのか、他に何が違うのか、そして違いを処理するためのベストプラクティスについてのドキュメントを見つけることができませんでした。特定のリクエストにCookieを設定するにはどうすればよいですか?理由と理由はどこかに文書化されていますか?

4

4 に答える 4

6

これを行うために私が見つけた唯一の方法は、リクエストでCookieヘッダーを手動で設定することです。

get "/", {}, { "HTTP_COOKIE" => "legal_accepted=yes; cookie2=value2; "}
于 2012-12-22T16:34:57.430 に答える
6

Rails 3.2.x(確かに3.2.16)では、統合テストでCookieを直接割り当てることができます。

cookies['foo'] = 'bar'

これで、テストとアプリケーションでCookie'foo'にアクセスできます。

puts cookies['foo']  (returns 'bar')
于 2015-03-24T10:36:01.700 に答える
4

Rails 5統合テストの場合、metkatの答えを少し変更する必要があります。

get "/", headers: {"HTTP_COOKIE" => "legal_accepted=yes; cookie2=value2;"}
于 2018-03-31T16:54:13.153 に答える
-1

ポルターガイストを使用したい場合は、統合テストで使用したCookieを処理する方法がいくつかあります。

https://github.com/teampoltergeist/poltergeist#manipulating-cookies

注意すべき点の1つは、Cookieを更新する場合は、最初にCookieを削除してから、設定する必要があるということです。

page.driver.remove_cookie("cookie_name")
page.driver.set_cookie("cookie_name", "some_value")
于 2016-07-29T23:54:28.387 に答える