8

我有根据 cookie 内容更改的一般应用程序行为,需要对其进行测试。例如,如果用户没有设置表明他们已接受网站法律条款的 cookie,则需要将他们重定向到 T&C 页面。

我可以使用在功能测试中设置 cookie

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

但是,这在集成测试中不起作用——没有可使用的请求对象。我一直找不到任何文档说明为什么会这样、还有什么不同以及处理差异的最佳实践。如何为给定的请求设置 cookie?原因和原因是否记录在任何地方?

4

4 回答 4

6

在 Rails 3.2.x(当然是 3.2.16)中,您可以直接在集成测试中分配 cookie:

cookies['foo'] = 'bar'

您现在可以在测试和应用程序中访问 c​​ookie 'foo':

puts cookies['foo']  (returns 'bar')
于 2015-03-24T10:36:01.700 回答
6

我发现这样做的唯一方法是在请求中手动设置 cookie 标头,例如

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

对于 Rails 5 集成测试,metkat 的答案应该稍微改变一下:

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

如果你想使用 Poltergeist,有一些我在集成测试中使用过的处理 cookie 的方法。

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

需要注意的一点是,如果要更新 cookie,则必须先删除 cookie,然后再设置它。

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