6

我有一些基于cookie内容的一般应用程序行为,需要测试它。例如,如果用户没有设置cookie,表示他们已接受网站的法律条款,则需要将其重定向到T页面。如何在Rails中为集成测试设置Cookie?

我可以在功能测试使用

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

然而,这不会在集成测试 - 有没有请求对象一起工作的工作设置cookie。我一直无法找到任何有关这种情况的文档,还有什么不同,以及处理差异的最佳实践。我怎样才能为给定的请求设置一个cookie?是什么和为什么在任何地方记录?

回答

5

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

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

在Rails 3.2.x中(当然在3.2.16),你可以直接在集成测试指定饼干:

cookies['foo'] = 'bar' 

您现在可以访问该cookie“富”在您的测试和应用程序:

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

你正在使用什么测试框架?我无法得到这个工作。 – dylankb

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") 
相关问题