我的一般应用程序行为会根据cookie内容而发生变化,需要对其进行测试。例如,如果用户没有cookie集表明他们已接受该网站的法律条款,则需要将他们重定向到T& C页面。
我可以使用
在功能测试中设置cookierequest.cookies["legal_accepted"] = "yes"
但是,这在集成测试中不起作用 - 没有请求对象可以使用。我一直无法找到任何文档,说明为什么会这样,还有什么不同,以及处理差异的最佳实践。如何为给定的请求设置cookie?是什么原因以及随后记录在哪里?
答案 0 :(得分:6)
我发现这样做的唯一方法是在请求中手动设置cookie标头,例如
get "/", {}, { "HTTP_COOKIE" => "legal_accepted=yes; cookie2=value2; "}
答案 1 :(得分:5)
在Rails 3.2.x(当然在3.2.16中)中,您可以直接在集成测试中分配cookie:
cookies['foo'] = 'bar'
您现在可以访问Cookie' foo'在您的测试和应用程序中:
puts cookies['foo'] (returns 'bar')
答案 2 :(得分:3)
对于Rails 5集成测试,metkat的答案应该略有改变:
get "/", headers: {"HTTP_COOKIE" => "legal_accepted=yes; cookie2=value2;"}
答案 3 :(得分:0)
如果你想使用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")