我有基于cookie内容的一般应用程序行为,需要对其进行测试。例如,如果用户没有一个cookie集,表明他们已经接受了网站的法律条款,他们需要被重定向到T&C页面。
我可以使用
在功能测试中设置cookierequest.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")