如何在Rails中为集成测试设置cookie ?



我有基于cookie内容的一般应用程序行为,需要对其进行测试。例如,如果用户没有一个cookie集,表明他们已经接受了网站的法律条款,他们需要被重定向到T&C页面。

我可以使用

在功能测试中设置cookie
request.cookies["legal_accepted"] = "yes"

然而,这在集成测试中不起作用——没有请求对象可以处理。我找不到任何文档说明为什么会这样,还有什么不同之处,以及处理这些不同的最佳实践。如何为给定的请求设置cookie ?为什么记录在任何地方?

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

get "/", headers: {"HTTP_COOKIE" => "legal_accepted=yes; cookie2=value2;"}

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

get "/", {}, { "HTTP_COOKIE" => "legal_accepted=yes; cookie2=value2; "}

X(当然在3.2.16中),您可以在集成测试中直接分配cookie:

cookies['foo'] = 'bar'

你现在可以在你的测试和应用程序中访问cookie 'foo'了:

puts cookies['foo']  (returns 'bar')

如果您想使用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")

最新更新