我在某个控制器中有一个操作,它在永久签名的cookie中设置一些值,如下所示:
def some_action
cookies.permanent.signed[:cookie_name] = "somevalue"
end
在一些功能测试中,我试图测试cookie设置是否正确,并提出如下结论:
test "test cookies" do
assert_equal "somevalue", cookies.permanent.signed[:cookie_name]
end
然而,当我运行测试时,我得到了以下错误:
NoMethodError: undefined method `permanent' for #
如果我只试着:
test "test cookies" do
assert_equal "somevalue", cookies.signed[:cookie_name]
end
我得到:
NoMethodError: undefined method `signed' for #
如何在Rails 3中测试签名的cookie?
发布于 2018-04-12 08:52:39
当我在谷歌上搜索一个类似问题的解决方案时,我遇到了这个问题,所以我会在这里发帖。在测试控制器操作之前,我希望在RSpec中设置一个签名的cookie。以下工作取得了成效:
jar = ActionDispatch::Cookies::CookieJar.build(@request)
jar.signed[:some_key] = "some value"
@request.cookies['some_key'] = jar[:some_key]
get :show ...
请注意,以下内容未起作用:
# didn't work; the controller didn't see the signed cookie
@request.cookie_jar.signed[:some_key] = "some value"
get :show ...
发布于 2018-04-12 10:15:21
在Rails 3的ActionControlller::TestCase中,可以在请求对象中设置签名的永久cookie,如下所示-
@request.cookies.permanent.signed[:foo] = "bar"
并且,可以通过执行以下操作来测试从控制器中执行的操作中返回的签名cookie。
test "do something" do
get :index # or whatever
jar = @request.cookie_jar
jar.signed[:foo] = "bar"
assert_equal jar[:foo], @response.cookies['foo'] #should both be some enc of 'bar'
end
请注意,我们需要设置签名的cookie。jar.signed[:foo]
,但请阅读未签名的cookiejar[:foo]
。只有这样,我们才能得到cookie的加密值,需要在assert_equal
。
https://stackoverflow.com/questions/-100008077
复制相似问题