ruby-on-rails - 测试 Rails 中 cookie 值的清除?

标签 ruby-on-rails cookies tdd

如何在功能测试中发送 cookie?如何测试以确保 cookie 已被清除?

我使用 TDD 为 Rails 应用程序构建模型取得了巨大成功,但在 Controller 测试方面遇到了障碍:我可以在测试中设置一次 cookie 值并读取它们,但我无法清除他们。即:

test "clears cookie" do
  get :set_it, :stuff => {'key' => 'value'} # stuff to cookify
  assert cookies['key'] == 'value' # works fine

  get :clear_it # cookie doesn't get sent. How do I simulate this?
  assert nil == cookies['key'], 'Cookie not cleared' # fails
end

rails 测试指南没有提到如何在测试中模拟发送 cookie,只是提到如何验证数据是否已在服务器上设置。我知道我之前遇到过这样的情况:在发送响应之前,服务器上的 cookie 数据不会更改。这就是这里发生的事情吗?我有点希望功能测试能够更好地“成为客户”。

这是一个众所周知的问题吗?人们是否已经放弃使用 JUnit 来完成这种事情了?我真的很希望能够使用一个框架来处理我的所有或几乎所有 tdd。

<小时/>

纯粹的绝望和猜测让我乐观地尝试@response.cookies,但这也不起作用。

最佳答案

如果您想专门针对 cookie 的取消设置进行单元测试,那么您实际上是在测试响应是否包含将 cookie 设置为空的 header 。我假设您的 get :clear_it 正在执行 cookies.delete :cookie-name 。这会将response.header 设置为包含Set-[COOKIE-NAME]=;。因此,如果其他方法失败,您可以直接查找该字符串。

您的代码中看起来可疑的地方是您只是直接检查 cookie。您的“获取”请求的响应在哪里?

如果一切都失败了,您还可以使用 webrat 的集成测试,如所述 here 。这可能不如单元测试那么好,但它至少会检查功能。

关于ruby-on-rails - 测试 Rails 中 cookie 值的清除?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/929515/

相关文章:

ruby-on-rails - rails 字段验证是否

javascript - 即使在页面刷新后,如何保持 Websocket 连接持久?

.net - 1999年10月12日有什么意义?

php 无法识别 javascript cookie

python - CSRF token 干扰 TDD - 是否有存储 csrf 输出的变量?

unit-testing - 单元测试站点地图节点

ruby-on-rails - 如何关闭 'ruby -w' 中的警告 'rake test' ?

ruby-on-rails - 写入包含宏的现有 Excel .xls 文件

ruby-on-rails - 设计测试数据库记录同时测试的冲突

javascript - Rails 5 使用 will_paginate 创建加载更多按钮