首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何测试永久性.在Rails 3中签名?

如何测试永久性.在Rails 3中签名?
EN

Stack Overflow用户
提问于 2018-04-12 00:28:28
回答 2查看 0关注 0票数 0

我在某个控制器中有一个操作,它在永久签名的cookie中设置一些值,如下所示:

代码语言:txt
复制
def some_action
    cookies.permanent.signed[:cookie_name] = "somevalue"
end

在一些功能测试中,我试图测试cookie设置是否正确,并提出如下结论:

代码语言:txt
复制
test "test cookies" do
    assert_equal "somevalue", cookies.permanent.signed[:cookie_name]
end

然而,当我运行测试时,我得到了以下错误:

代码语言:txt
复制
NoMethodError: undefined method `permanent' for #

如果我只试着:

代码语言:txt
复制
test "test cookies" do
    assert_equal "somevalue", cookies.signed[:cookie_name]
end

我得到:

代码语言:txt
复制
NoMethodError: undefined method `signed' for #

如何在Rails 3中测试签名的cookie?

EN

回答 2

Stack Overflow用户

发布于 2018-04-12 08:52:39

当我在谷歌上搜索一个类似问题的解决方案时,我遇到了这个问题,所以我会在这里发帖。在测试控制器操作之前,我希望在RSpec中设置一个签名的cookie。以下工作取得了成效:

代码语言:txt
复制
jar = ActionDispatch::Cookies::CookieJar.build(@request)
jar.signed[:some_key] = "some value"
@request.cookies['some_key'] = jar[:some_key]
get :show ...

请注意,以下内容未起作用:

代码语言:txt
复制
# didn't work; the controller didn't see the signed cookie
@request.cookie_jar.signed[:some_key] = "some value"
get :show ...
票数 0
EN

Stack Overflow用户

发布于 2018-04-12 10:15:21

在Rails 3的ActionControlller::TestCase中,可以在请求对象中设置签名的永久cookie,如下所示-

代码语言:txt
复制
 @request.cookies.permanent.signed[:foo] = "bar"

并且,可以通过执行以下操作来测试从控制器中执行的操作中返回的签名cookie。

代码语言:txt
复制
 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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100008077

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档