`

在Rails 2.3 中测试cookie

阅读更多
Testing Cookies in Rails 2.3

近期,我向Rails2.3移植项目的时候,遇到了一些测试cookies问题.例如,下面的Cookies用来保存访问者的用户名,Email地址,留言url信息.下面是保存cookies的语句:

cookies['blog_visitor_name'] = { :value => @comment.name, :expires => 1.year.from_now }


上面的cookies赋值是属于扩展模式,要设置哈希表的值对,还要设置过期时间.下面的描述是最简单的cookies设置:
 cookies['cookie_name] = 'cookie_value'

这种设置和读取cookies的方式在Rails2.3中并没有什么改变.改变的是测试cookies的方式.在Rails2.3之前,你需要为每一个request cookie创建一个CGI::Cookie对象,当请求发送后,cookie创建了,你就可以通过cookies的accessor用assert断言来验证cookies的属性了.这是Rails2.3之前的方式
例子如下:
 def test_comment_creation_overwrites_visitor_cookies
   @request.cookies['blog_visitor_name'] = CGI::Cookie.new('blog_visitor_name', 'Fred F.')
   post :create, { ... }
   assert_equal 'Fred', cookies['blog_visitor_name'].value
   assert_equal '/', cookies['blog_visitor_name'].path
   assert cookies['blog_visitor_name'].expires > 364.days.from_now
 end


上面代码,演示了测试cookies的之前用法.先创建一个CGI:Cookie对象.执行创建请求,生成对应的cookies并把Fred F做为名字.当请求执行,就可以通过断言来验证cookies了.这是之前的方式.

对于Fails2.3, cookies测试的用法改成在Controller中执行.

 def test_comment_creation_overwrites_visitor_cookies
   @request.cookies['blog_visitor_name'] = 'Fred F.'
   post :create, { ... }
   assert_equal 'Fred', cookies['blog_visitor_name']
   assert_equal '/', cookies['blog_visitor_name']...???
   assert cookies['blog_visitor_name']...??? > 364.days.from_now
 end



cookies的赋值和上面的情况不一样了,更像使用controller.

引用
Since the cookies accessor now returns the cookie value only (like in controllers), it is easier to test wether a cookie was correctly set to the expected value. However, extended information like the cookie path and the expiration time are not available anymore and therefore we cannot test anymore if these attributes were correctly set by the controller.

So how can you test cookie attributes with Rails 2.3? Unfortunately you can’t. The cookies accessor in tests parses the content of the Set-Cookie header of a response and builds a hash of cookies which were set by the controller action. Unfortunately, it only gathers the cookie name and value and does not parse the rest of the data. The only way that I know of to test cookie attributes is to manually parse the contents of the Set-Cookie header for now.
分享到:
评论
1 楼 zhong871004 2010-05-21  
引用
cookies测试的用法改成在Controller中执行
打字有误??

相关推荐

    rails 2.3 chm文档 ,官方最新版

    rails 2.3 chm文档 官方最新版

    railsbrain网站的rails2.3文档(bug修复版)

    Railsbrain是一个专注于Rails框架的在线资源平台,而这个“railsbrain网站的rails2.3文档(bug修复版)”显然是一份针对Rails 2.3版本的更新文档,旨在修复用户在浏览和交互过程中遇到的问题。Rails是Ruby编程语言的...

    Ruby on Rails 2.3 Guide.chm

    Ruby on Rails Guide:是rails官方教程,本人为了大家学习查阅的方便,制成chm格式。就如同java doc的chm格式一样方便。

    ruby on rails 2.3.5 api html版

    通过阅读和查阅Rails 2.3.5的API文档,开发者不仅可以学习到如何在Rails环境中组织代码,还能掌握如何利用其强大的特性来提高开发效率。不过要注意,Rails框架已经发展到更高的版本,新版本可能引入了更多的改进和...

    rails 3.2 API

    在Rails 3.2中,API文档涵盖了框架的所有主要组件,包括Action Controller、Action View、ActionMailer、ActiveRecord、ActiveResource、ActionPack、ActiveSupport以及Rails本身的核心功能。这些组件构成了Rails...

    rails2.3.2

    描述中的 "ruby and rails 的框架rails-2.3.3.zip" 提到的是 Rails 的另一个版本 2.3.3,尽管与标题中的版本号不完全匹配,但我们可以推断这是关于 Rails 2.3.x 系列的讨论。这个压缩包很可能包含了 Rails 框架的源...

    i18n_routing:用于Rails 2.3.x和Rails的I18n路由模块。轻松转换您的路由!

    所有必需的信息都可以在Wiki上找到: 如有疑问,请使用i18_routing谷歌论坛: 适用于Rails 2.3、3.0、3.1和3.2下一个版本的TODO(写于2010年6月9日) 处理同一资源名称的多个翻译(例如:嵌套和非嵌套资源) 处理...

    rails guides 2.3 CHM版

    rails guides的CHM版本,这个向导的版本是2.3

    深入解析Rails测试策略:单元测试与功能测试的区别

    单元测试和功能测试是Rails中两种主要的测试类型,它们在目的、范围和实现方式上有所不同。本文将详细探讨Rails中单元测试和功能测试的区别,并提供实际代码示例。 单元测试和功能测试是Rails测试策略的两个重要组成...

    pgq:基于 PgQ Skytools for PostgreSQL 的 ARRails 队列系统,如 Resque on Redis。 Rails 2.3 和 3 兼容

    Pgq 基于 PgQ Skytools for PostgreSQL 的 AR/Rails 队列系统,如 Resque on Redis。...将 pgq 安装到数据库(如果测试数据库一直在重新创建,则每次都应重新安装 pgq): $ rake pgq:install or execute $ pgqad

    Ruby on Rails:Rails中的测试驱动开发.docx

    Ruby on Rails:Rails中的测试驱动开发.docx

    在rails中 使用RSpec生产CHM文档

    标题 "在Rails中使用RSpec生产CHM文档" 暗示了这个话题是关于如何在Ruby on Rails(简称Rails)框架中使用RSpec测试工具来创建帮助文档,特别是以CHM(Microsoft Compiled HTML Help)格式。CHM文件是一种常见的...

    Ruby-Rails的AB测试

    在Ruby on Rails框架中,A/B测试是一种非常重要的实践,用于评估和优化网站或应用程序的用户体验和性能。A/B测试,也称为分组测试或对照实验,是将用户随机分配到两个或更多版本(变体)的同一产品或功能中,以比较...

    使用RSpec 测试Rails 程序.pdf

    - **清理**:在测试通过后,对测试代码进行清理,去除不必要的部分,使其更加简洁高效。 #### 十、最后的建议 - **先练习编写简单的测试**:从编写简单的单元测试开始,逐渐过渡到更复杂的测试类型。 - **清楚自己...

    Ruby on Rails中文指南

    在Ruby on Rails中文指南中,你将全面学习到如何利用这个强大的框架来构建动态的、数据驱动的Web应用程序。 首先,让我们深入理解Rails的核心概念: 1. **路由(Routes)**:Rails的路由系统是应用程序的导航蓝图...

    rails指南 中文版

    5. **Gemfile与Bundler**:Rails项目通常使用Gemfile来管理依赖库,Bundler工具则用于安装和管理这些依赖,确保在不同环境下项目的运行一致性。 6. **Scaffolding**:Rails提供了快速生成基本CRUD(Create, Read, ...

    关于rails 3.1 cucumber-rails 1.2.0

    在`support`目录下,开发者可以放置一些辅助文件,例如World类(用于扩展Cucumber的上下文)、Hooks(用于在测试前后的自定义操作)和环境配置。这些支持文件增强了Cucumber-Rails的灵活性和可定制性。 结合Rails ...

    rails-session_cookie:一个用于获取原始Rails会话Cookie的机架应用

    Rails :: SessionCookie 快速,松散耦合的请求有关经过Cookie验证的应用程序的规范。 为什么 可能,您可能已经看到了很多像这样的代码: # config/initializers/session_store.rb Rails . application . config . ...

    combustion, 简单,优雅的Rails 引擎测试.zip

    combustion, 简单,优雅的Rails 引擎测试 燃烧in是一个以简单有效的方式测试 Rails 引擎的库,而不是在规范或者测试文件夹中创建完整的Rails 应用。它允许你在引擎的上下文中编写你的规格,只使用你需要的Rails 应用...

Global site tag (gtag.js) - Google Analytics