2012-07-25 40 views
5

我无法弄清楚如何在测试我的帮助器方法时测试cookie是否已设置。如何在助手规范中访问cookie?

假想的helper方法:

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 

任何人都知道如何做到这一点?

+0

http://stackoverflow.com/questions/5475989/rspec-setting-cookies-in-助手测试 在这里,总是做你的功课! – 2012-07-25 22:05:49

+0

我看到那篇文章,就像OP提到的那样,他仍然不确定如何_get_ cookies。 – 2012-07-25 22:15:11

+0

根据rspec文档'response.cookies [“foo”]'应该可以工作,但我在rails 3.2和rspec 2.8上,它不适用于我。 https://www.relishapp.com/rspec/rspec-rails/docs/controller-specs/cookies。据我所知,在rspec,导轨集成测试和机架之间出现了一些奇怪的事情,这使得很难弄清楚。 – Dty 2012-07-26 00:39:06

回答

4

代订CookieJar一个简单的模拟的RSpec工作,如果你愿意:

helper.stubs(:cookies => cookies = mock) 
cookies.expects(:[]=).with('foo', 'bar') 
helper.my_helper('foo', 'bar') 
0

请求通过

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

这对我不起作用。请记住,我正试图_get_ cookie,而不是设置它。 – 2012-07-25 22:15:30

2

我在轨道上3.2和RSpec 2.8的饼干。尽管rspec docs表示以下内容适用于要求规范(即集成测试)。

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

是的,我已经在标准请求规格中检查过cookies。 – 2012-07-26 00:52:02

+0

@MattBaker你正在使用哪种版本的rails和rspec? – Dty 2012-07-26 00:59:57

+0

@MattBaker在这里还有一篇关于如何通过在rspec中使用cookie来调试他们的方式的文章。它可能会帮助您弄清楚如何解决这个问题。 http://dobbse.net/thinair/2011/12/capybara-racktest-rspec-cookies-2of2.html – Dty 2012-07-26 01:01:12

相关问题