如果你在某个action中对Cookie进行了设置,然后你又打算对你设置的cookie进行测试,那么你可能会遇到麻烦,不妨看看下面这段代码:
class CookiesController
def update
cookies[:name] = 'demo'
end
end
describe CookiesController
it "should update cookies[:name] to 'demo'" do
request.cookies[:name] = 'test'
put :update
request.cookies[:name].should == 'demo'
end
end
如果你运行上面的测试,将会得到一个:expected ‘demo’ got
‘test’,这是怎么回事,cookie设置失败了?实际上这是正确的,之所以产生这样的结果是因为我们对Rails的Cookie机制不了解,首先我
们需要区分request.cookies和Controller中的cookies,request.cookies是用于模拟客户端发送的
cookie的,它是一个Hash对象,因此我们可以像使用hash那样使用它:
>> request.cookies[:name] = ‘test’
>> request.cookies[:name]
test
但是Controller中的cookies则不同,它是一个ActionController::CookieJar对象,这个cookies对
象实际上保存了2个cookie集合:incoming cookie和outgoing cookie。incoming
cookie就是客户请求中所携带的cookie(也就是request.cookies),而outgoing
cookie则是在请求处理完后将被设置回客户端的cookie。
因此尽管我们使用了[]=方法来设置cookie,但因为cookies对象重载了[]与[]=方法:
- []方法返回的是incoming cookie,也就是request中携带的cookie
- 而[]=方法设置的却是outgoing cookie,它只对下一个请求起作用,也就是说它会被包含在下一个请求的incoming cookie中。
因此设置controller cookies,我们只能得到:
>> cookies[:name] = ‘test’
>> cookies[:name]
nil
如果你需要测试cookies是否设置成功,那么一个简单的方法,就是将controller中的cookies替换成一个hash,比如:
describe CookiesController
it "should update cookies[:name] to 'demo'" do
request.cookies[:name] = 'test'
@cookies = {}
controller.stub!(:cookies).and_return(@cookies)
put :update
@cookies[:name].should == 'demo'
end
end
相关推荐
在Ruby on Rails框架中,A/B测试是一种非常重要的实践,用于评估和优化网站或应用程序的用户体验和性能。A/B测试,也称为分组测试或对照实验,是将用户随机分配到两个或更多版本(变体)的同一产品或功能中,以比较...
2. **bin**:存放可执行文件,如`rails`脚本,用于启动服务器、运行测试等。 3. **config**:配置文件的集合,包括数据库连接、路由设置、应用环境等。 4. **db**:数据库相关的文件,如迁移(migrations)用于...
- **Secure Cookies**:为了提高安全性,Rails 4引入了一种新的安全cookie机制,可以更好地保护用户的会话数据。 - **Asset Pipeline的优化**:Rails 4对Asset Pipeline进行了改进,使得前端资源的管理更加简便。 - ...
11. **测试(Testing)**:Rails鼓励TDD(Test-Driven Development),提供了丰富的测试工具,如RSpec、Cucumber和MiniTest,确保代码的质量和可靠性。 12. **生成器(Generators)**:Rails的生成器可以帮助快速...
书中第二章提到 **测试驱动开发(TDD)** 和 **行为驱动开发(BDD)**,这两种方法是 Rails 社区广泛采用的测试策略。 - **测试驱动开发(TDD)**: - 测试先行:先编写测试用例,再编写满足这些测试的代码。 - 循环...
《基于Ruby On Rails的在线购书系统》是一个深入探讨如何利用Ruby on Rails框架构建电子商务平台的项目。Ruby on Rails(RoR)是一个开源的Web应用框架,它遵循MVC(模型-视图-控制器)架构模式,以Ruby编程语言为...
从压缩包的文件名称"plug_rails_cookie_session_store-master"来看,这很可能是该插件的源代码仓库主分支的克隆,可能包含了项目的README、配置文件、源代码以及测试等相关文件。 在实际应用中,使用`plug_rails_...
7. **会话和cookies**:讲解如何使用Rails的session和cookie机制来管理用户状态。 8. **表单和链接**:介绍如何创建HTML表单以及使用Rails的辅助方法创建链接,实现用户交互。 9. **部署**:讲解如何将应用程序...
当用户成功登录后,会话ID会被存储在用户的cookie中,服务器根据这个ID识别用户,从而实现会话持久化。 2. **哈希和加密**: 为了保护用户密码,它们在存储前通常会先进行哈希和加盐处理。Rails提供了BCrypt或SHA...
Rails的许多设计原则和工具都直接支持这种敏捷工作流程,如自动化测试、DHH(David Heinemeier Hansson)提出的"约定优于配置"原则以及强大的开发工具如Rails console和Rails generator。 本书的英文版可能包含以下...
7. **安全设置与配置**:Rails的默认配置在很多方面都有助于安全性,但开发者仍需了解如何根据项目需求调整这些设置,例如调整session存储方式、启用HTTP-only cookie、配置SSL等。 8. **更新与维护**:保持Rails...
22.2 Cookie和Session 354 22.3 Flash——Action之间的通信 364 22.4 过滤器与校验 366 22.5 缓存初接触 372 22.6 GET请求的问题 378 第23章 Action View 381 23.1 模板 381 23.2 使用辅助方法 385 23.3 用于格式化...
无状态 JSON API - 没有不安全的会话或 cookie,因此不需要 CSRF 令牌 作为我们的并发 Web 服务器 用于我们的数据存储 UUID 作为用户的主键 ( ) 用于后台处理(使用 ) 所有电子邮件都通过 ActiveJob + Resque ...
simple_split –在Rails上进行简单的A / B测试 simple_split gem为通过Rails进行拆分测试提供了绝对最简单的接口,同时仍提供了一组表达性强的工具来编写和维护实验。 更传统的解决方案(例如提供了更多的优势,但...
7. **测试(Test)**:Rails鼓励TDD(测试驱动开发),在`test`目录下包含了针对模型、控制器和功能的测试。使用RSpec或Test::Unit进行测试,确保代码质量。 8. **JavaScript**:虽然标签中提及JavaScript,Rails默认...
在 Rails 应用程序中,通常用户的登录状态是通过 session 或者 cookie 来维护的。当用户登录后,这些信息会被存储,然后在后续请求中用来验证用户身份。然而,如果想以管理员的身份查看并模拟另一个用户的行为,传统...
产生跑步 rails new rspec-rails-cookies-bug --skip-action-mailer --skip-action-mailbox --skip-action-text --skip-active-record --skip-active-...但是通过Rails控制器测试运行它就可以了 bundle exec rails test
Split框架充分利用了Rack的特性,将A/B测试的逻辑无缝地集成到Ruby on Rails或其他Rack兼容的应用中。 首先,让我们深入了解一下什么是A/B测试。A/B测试是一种统计方法,用于比较两种或多种变体(如网页设计、营销...
- Rails鼓励TDD(测试驱动开发),项目中应包含各种测试,如RSpec用于业务逻辑测试,Capybara用于集成测试,确保功能正确运行。 7. **部署**: - 项目完成后,通常会将其部署到如Heroku或DigitalOcean这样的...
您可能要讲的内容: Ruby版本系统依赖配置数据库创建数据库初始化如何运行测试套件服务(作业队列,缓存服务器,搜索引擎等) 部署说明… 如果您不打算运行rake doc:app请随意使用其他标记语言。