On Tue, Jan 11, 2011 at 17:33, David Chelimsky <dchelim...@gmail.com> wrote:
>
> On Jan 10, 2011, at 8:27 AM, Marko Anastasov wrote:
>
>> On Mon, Jan 10, 2011 at 05:05, David Chelimsky wrote:
>>> On Jan 5, 2011, at 11:54 AM, Marko Anastasov wrote:
>>>
>>>> Hello,
>>>>
>>>> I set a value in controller spec using @request.cookies:
>>>> https://gist.github.com/371356ba0a19666fd3b5
>>>>
>>>> but when the controller reads it, it's nil somehow, as this screenshot
>>>> from the debugger shows:
>>>> http://dl.dropbox.com/u/830772/p/Selection_033.jpeg
>>>>
>>>> This does not occur in development environment. I'm using RSpec 2.4
>>>> and Rails 3.
>>>>
>>>> Does someone have an idea what I am doing wrong / how to solve this?
>>>
>>> That looks like it should work, and I don't think you're doing anything 
>>> wrong.
>>>
>>> What's happening is that the object returned by @request.cookies is a Hash, 
>>> but the object returned by cookies() in the controller is an 
>>> ActionDispatch::Cookies::CookieJar. If you print them both out with 
>>> .inspect, they'll both say they are {:lastfm_username => "rj"}, but the 
>>> answer differently to other questions:
>>>
>>> # in spec
>>> @request.cookies[:lastfm_username] # => "rj"
>>> @request.cookies["lastfm_username"] # => nil
>>>
>>> # in controller
>>> cookies[:lastfm_username] # => nil
>>> cookies["lastfm_username"] # => nil
>>>
>>> You'll see exactly the same behavior, btw, in a Rails functional test 
>>> (which an RSpec controller spec wraps), so this is happening in the Rails 
>>> test infrastructure, not RSpec. Care to log a bug report in the Rails 
>>> tracker?
>>>
>>> https://rails.lighthouseapp.com/
>>>
>>
>> Thanks for your explanation David. I created Rails ticket #6272.
>>
>> Later I found a workaround of using request.cookies in the controller,
>> but it would be nice if it would just work with cookies.
>>
>> Btw I was also not sure when to use symbols, and when keys. Eg if I
>> set a value in controller:
>> cookies.permanent[:lastfm_username] = username
>>
>> then in spec, I need to obtain the value with a string:
>> cookies["lastfm_username"].should == "rj"
>
> My understanding is that it's a HashWithIndifferentAccess, which means you 
> can use string or symbol keys. That said, however, when the app is running 
> the cookies come from the rack environment and are always string keys, so I'd 
> recommend sticking w/ that for consistency, but that's a pretty subjective 
> thing.
>

When I inspected spec's cookies' class in debugger, it was Hash. In
any case, I will remember that they're always in string keys when
coming rack. As I read your reply I connected this with the
observation that I needed to add an OR to use string keys in cucumber
environment within the controller.

Thanks.
_______________________________________________
rspec-users mailing list
rspec-users@rubyforge.org
http://rubyforge.org/mailman/listinfo/rspec-users

Reply via email to