我该如何在助手规范中访问cookies?

5

我不知道如何测试我的辅助方法是否设置了cookie。

假设的辅助方法:

def my_helper(k,v)
    cookies[k] = v
end

测试:

it 'should set cookies' do  
  helper.my_helper("foo", "bar")
  helper.cookies["foo"].should == "bar" #nil
  helper.response.cookies["foo"].should == "bar" #nil
end

有人知道如何做这个吗?


在这里,一定要做好你的功课! - Rodrigo Zurek
我看到了那篇帖子,正如楼主所提到的,他仍然不确定如何获取cookies。 - Matt Baker
根据rspec文档,response.cookies["foo"]应该可以工作,但我使用的是Rails 3.2和rspec 2.8,它对我不起作用。https://www.relishapp.com/rspec/rspec-rails/docs/controller-specs/cookies。据我所知,在rspec、Rails集成测试和Rack之间存在一些奇怪的事情,这使得很难弄清楚。 - Dty
3个回答

4
用一个简单的rspec模拟对象替换CookieJar是可行的,只要你愿意:
helper.stubs(:cookies => cookies = mock)
cookies.expects(:[]=).with('foo', 'bar')
helper.my_helper('foo', 'bar')

2

我使用的是Rails 3.2和Rspec 2.8。尽管rspec文档中写着以下内容只适用于控制器测试,但在我的请求测试(即集成测试)中以下代码可以正常工作。

it 'should set cookies' do  
  cookies['foo'] = 'bar'
  visit "/"
  cookies['foo'].should == 'bar'
end

是的,在标准请求规范中,我肯定已经检查了 cookies。 - Matt Baker
@MattBaker 你正在使用哪个版本的Rails和Rspec? - Dty
@MattBaker 这里有一篇关于如何在 rspec 中使用 cookies 进行调试的文章,可能会帮助你解决整个问题。http://dobbse.net/thinair/2011/12/capybara-racktest-rspec-cookies-2of2.html - Dty
我们使用Rails 3.1.4和rspec 2.8。也许我会尝试升级。 - Matt Baker

0

通过请求获取 cookie

 helper.request.cookies[:awesome] = "something"

这对我不起作用。记住,我正在尝试获取cookie,而不是设置它。 - Matt Baker

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接