如何在Rails模型的Rspec测试中禁用belongs_to :touch选项?

2024-02-29

拥有大型模型堆栈并广泛使用娃娃缓存技术,最终会在模型更新后“触及”许多父模型。

在测试时,这似乎是浪费时间,除非您尝试专门测试该功能。

有没有办法防止模型touch their belongs_to测试环境或测试级别的关联?

更新1:

我对此案的第一次尝试是

# /config/initializers/extensions.rb
#
class ActiveRecord::Base
  def self.without_touch_for_association(association_name, &block)
    association_name = association_name.to_sym
    association = self.reflect_on_all_associations(:belongs_to).select { |reflection| reflection.name == association_name }.first
    options = association.options
    association.instance_variable_set :@options, options.except(:touch)

    yield

    association.instance_variable_set :@options, options
  end
end

Post.without_touch_for_association(:user) do
  Post.last.save
end

当然,没有成功并保存Post.last仍然触及它User.

更新理由:

我理解并同意这种方法可能是错误的来源,而且根本不是一个好的做法。问题是我有一个巨大的套件,其中包含大量集成和单元测试。玩偶缓存也深入到模型树中。每次我查看日志时,我都会看到很大一部分与触摸相关的查询。我知道最好的方法是优化单元测试以添加更多的模拟和存根以及更少的持久性。在集成测试中解决问题更加困难。

无论如何,我问这个问题是为了学习和研究。我有兴趣探索这项技术的潜在速度改进。

解决方案:有关工作代码,请参阅下面我自己的答案。


假设您使用的是 Rails 4.1.4 或更高版本:

User.no_touching do
  Post.last.save
end

or even

ActiveRecord::Base.no_touching do
  Post.last.save
end

See ActiveRecord::NoTouching http://api.rubyonrails.org/classes/ActiveRecord/NoTouching/ClassMethods.html.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在Rails模型的Rspec测试中禁用belongs_to :touch选项? 的相关文章

  • Rails 4 应用程序...在开发环境中,除非刷新页面,否则 javascript 不会触发

    所以我的第一个rails4应用程序遇到了一个奇怪的问题 除非我重新加载页面 否则我的页面javascript不会触发 对于我的 asset pipeline JS 和 content for JS 来说都是如此 在我的 assets jav
  • Rails Windows Vagrant 响应时间非常慢

    我在跑 Vagrant 1 7 1 Rails 4 1 4 Thin 1 6 1 Windows 7 每个静态文件的发送时间都超过一秒 在我的 PC 上加载一个页面可能需要大约 20 秒 而在同事的 Linux 机器上则只需瞬间 有一些帖子
  • RoR - Rails 中的大文件上传

    我有一个 Rails Web 应用程序 允许用户上传视频 视频存储在 NFS 安装的目录中 当前的设置适用于较小的文件 但我也需要支持大文件上传 最多 4GB 当我尝试上传 4GB 文件时 它最终会发生 但从用户体验的角度来看很糟糕 上传开
  • 将rails_admin 与rails_api 结合使用

    我最初将此发布为Rails api GitHub 上的问题 https github com sferik rails admin issues 2617 但由于不活跃 我现在将其发布在这里 我正在尝试使用rails admin使用 Rai
  • 我想要一个默认选择空白值的日期选择框

    我用了以下date select助手 但没有一个显示默认情况下选择空白值的日期选择框 通过以下所有代码 我得到了选择框 但选择了当前日期 我在 Rails 2 3 2 上
  • Shoulda/RSpec 匹配器 - 条件验证

    在我的代码中 我使用 Shoulda 匹配器进行了以下验证 效果很好 it should validate presence of name 在我的模型中 我已将条件添加到验证中 validates presence of name if
  • Ruby on Rails 服务器在 HTTPS POST 请求期间崩溃

    我正在尝试与你沟通城市飞艇API http urbanairship com docs push html broadcast使用 ROR Web 应用程序 在我的控制器中 我有以下代码 require net http require n
  • 让 Rails 生产在端口 80 上运行

    我正在尝试让我的 Rails 应用程序在生产模式下运行 但遇到了一些困难 我正在使用 Passenger 和 apache 并运行 Ubuntu 12 04 我已经配置和创建了生产数据库 并设置了乘客 状态如下 rvmsudo passen
  • 仅针对 Rake 任务运行初始化程序

    我希望在执行 Rake 任务时运行某个初始化程序 但在运行 Rails 服务器时不运行 区分 Rake 调用和服务器调用的最佳方法是什么 Rake 允许您指定任务的依赖关系 最好的建议操作是将特定于 rake 的初始化放入其自己的任务中 而
  • Rails 3:如何让用户在表单中至少选择一个复选框?

    我有一个表单 用户在提交表单之前必须选中至少一个复选框 有没有任何插件可以处理这个问题或者jquery可以应用于我的表单 不幸的是我完全是一个 jquery 菜鸟 上面的所有答案都显示了如何在客户端执行此操作 这确实可能更好 正如您的问题标
  • `dplyr::_join` 函数的命名向量“by”参数[重复]

    这个问题在这里已经有答案了 我正在写一个函数dplyr join两个数据框by不同的列 第一个数据帧的列名称动态指定为函数参数 我相信我需要使用rlang准引用 元编程 但未能找到可行的解决方案 我很感激任何建议 library dplyr
  • Groovy 元编程 - 将静态方法添加到 Object.metaClass

    我遇到了无法解决的 Groovy 元编程问题 将静态方法 foo 添加到类 FooBar 时 FooBar foo 按预期工作 FooBar metaClass static foo println hello FooBar foo 但是
  • 即使路由存在,Rspec 命名空间路由规范也会失败

    我在用着rspec rails 2 8 1 and 导轨3 1 3 我正在尝试测试 Admin ZonesController 的路由 我已经通过运行验证了浏览器中存在该路由rake routes 我没有使用 ActiveRecord 如果
  • Rails 3.2:用 json 序列化中的空字符串替换 null 值

    我正在使用 Rails 3 2序列化 http www simonecarletti com blog 2010 04 inside ruby on rails serializing ruby objects with json 将 ru
  • Rails 3.1、Ruby 1.9.2-p180 和 UTF-8 问题

    我在使用 UTF 8 字符时遇到一些问题 这是 db seeds rb User create username eml first name last name ck email email protected cdn cgi l ema
  • 如何准确地衡量加载模型所需的时间?

    我想对加载模块 find by id 234 调用 所需的时间进行基准测试 另外 我如何跟踪加载页面所需的时间 我知道我在运行 Rails 服务器时得到此信息 但这是在调试模式下 我想要生产速度基准 可能吗 为了快速检查 我强烈建议检查基准
  • 如何在Rails中使用jquery tokeninput?

    我正在尝试在我的应用程序的表单中添加 tokeninput jquery 字段 该字段允许用户发布状态更新 我希望用户能够将作品 单独的模型 附加到状态更新中 我正在使用 act as taggable on gem 并且我的查询指定标签上
  • Ruby on Rails 两个同时创建两个不同控制器的操作

    我有一个线程控制器和消息控制器 线程 has many 消息 用户单击发送后 我将数据发送到线程控制器以创建线程 我想做到这一点 线程控制器 rb def create if thread save send data into messa
  • 如何在不初始化Rails的情况下从schema.rb创建数据库?

    我正在尝试从 schema rb 创建所有表 我使用命令 rake db schema load 但是 这失败了 因为在我的一个初始化程序中 它引用了一个显然不存在的模型 表 因为数据库为空 我可以注释掉这些行 然后再次运行 schema
  • Rails 6:每个用户只能创建一个配置文件

    我目前正在开发 Rails 6 应用程序 我有以下关联 用户有一个配置文件 并且配置文件属于用户 当编辑用户的配置文件时 我最终为该用户提供了两个配置文件 我希望每个用户只有一份个人资料 编辑表单 profile edit html erb

随机推荐

  • 为什么类中不允许函数模板特化?

    在stackoverflow上找到了我的许多问题的答案后 我现在遇到了一个我找不到答案的问题 我希望有人愿意帮助我 我的问题是我想在 C 类中对函数进行显式模板化 我的编译器 g 和 C 标准 14 7 3 告诉我 这种专业化必须在声明类的
  • 图像未从数据库获取

    我在我的服务器中存储了一些图像 我使用 JSON 从服务器获取远程数据 当我将图像存储在本地数据库中时它正在工作 当我使用 json url 时它不起作用 我收到 EXC BAD ACCESS 错误 code Mysof h 文件 inte
  • 如何编写自定义 python 日志处理程序?

    如何编写自定义控制台日志函数以仅在控制台窗口上输出单行日志消息 而不是附加 直到第一个常规日志记录 progress ProgressConsoleHandler console logging StreamHandler logger l
  • Material-UI Next js 链接按钮

    我正在开发一个使用 Next JS 和 Material UI 构建的服务器端渲染 React 项目 我想应用到 Material Uibutton https material ui com api button gt 的与动态路线链接
  • 从 ts 打开选择(角度、ng-select)

    我在页面上有几个 ng selects 并且正在尝试从 ts 打开一个 我可以使用以下命令专注于正确的 ng select ViewChildren NgSelectComponent ngselect QueryList
  • 有效计算 JavaScript 中对象的键/属性的数量

    这个问题几乎与如何有效地计算 JavaScript 中对象的键 属性的数量 https stackoverflow com questions 126100 how to efficiently count the number of ke
  • ScrollView 中的 ListView - 小错误

    我想在滚动视图中有一个列表视图 这个方法几乎完美 https stackoverflow com a 3495908 2811653 https stackoverflow com a 3495908 2811653 当我在一行中输入的文本
  • 如何使用 Nokogiri 的 xpath 和 at_xpath 方法

    我正在学习如何使用 Nokogiri 根据这段代码 我提出了几个问题 require rubygems require mechanize post agent WWW Mechanize new post page post agent
  • 有人可以解释一下 staticmethod 的源代码在 python 中是如何工作的吗

    首先 我了解装饰器一般是如何工作的 而且我知道 staticmethod去掉签名中的实例参数 使得 class C object staticmethod def foo print foo C foo
  • 在 apache xmlrpc 客户端中记录输入/输出 xml

    我正在使用 Apache xmlrpc 使用 Java 构建 xmlrpc 客户端 但无法弄清楚如何记录输入 输出 xml 接收和发送的原始数据 我该怎么做呢 谢谢 我的解决方法是使用自定义传输 如下所示 也许有更优雅的方式来做到这一点 i
  • 如何将字符串公式变成“真正的”公式?

    I have 0 4 A1在单元格中 作为字符串 如何将这个 字符串公式 转换为真正的公式并在另一个单元格中计算其值 Evaluate可能适合 http www mrexcel com forum showthread php t 6206
  • 按键在嵌套数组深处查找

    假设我有一个对象 title some title channel id 123we options channel id abc image http asdasd com all inclusive block img jpg titl
  • LINQ 通常比同等的 SQL 语句慢吗

    如果我编写一个包含许多 group by 子句等的大型 SQL 语句 使用普通 SQL 可能是存储过程 会更快吗 还是 Linq 仅将其解析为非常好的 SQL 语句并很快给出结果 在某些情况下你may能够比 LINQ to SQL 更好地调
  • 如何使用 SharePoint Web 服务重命名文件?

    我有一个文档库的自定义定义 并且我尝试仅使用开箱即用的 Web 服务重命名库中的文档 使用提供的 名称 字段定义视图并尝试 LinkFilename 后 我对重命名文件的调用分别返回失败或忽略新值 如何使用 SharePoint Web 服
  • 实体框架、linq 函数和内存使用

    我是 EF 新手 我曾经使用数据集 表适配器和存储过程 我刚刚发现 EF 的简单性 并且发现 EF 方法可以为我的开发提供很多帮助 我有几个问题 我试图寻找他们的答案但徒劳 因为我总是与有以下情况的客户合作巨大的桌子 例如我拨打这个电话的事
  • 分割逗号分隔的字符串[重复]

    这个问题在这里已经有答案了 我在 R 中有一个如下形式的字符串 AAAAA BBBBB CCCCC 我想将其转换为包含相同字符串元素 AAAAA BBBBB 等 的标准典型 R 向量 vector lt c AAAAA BBBBB CCCC
  • 运算符“||”不能应用于“lambda 表达式”和“lambda 表达式”类型的操作数

    我如何构建 LINQWHERE子句包含OR 我有一个对象列表 我想返回那些与搜索条件匹配的对象 所包含的对象有很多属性 只要any符合条件 我想退货 IEnumerable
  • 当另一个进程 Window ShowInTaskbar = false 时将其置于前台

    我们只希望我们的应用程序在任何时候都运行一个实例 因此 在启动时 它会查看应用程序是否正在运行 如果是 它会调用设置前景窗口在主窗口上 这一切都很好 大多数情况下 当我们的应用程序启动时 它将显示一个启动屏幕和一个登录表单 这两种形式都有显
  • 如何替换 PostgreSQL 中文本列中的字符数组?

    我有 2 个文本列 需要将数组 1 q x y z 中的字符替换 更新时 为数组 2 中的索引等效值 a b c d 我最接近 atm 的方法是将替换调用嵌套在一起 如下所示 UPDATE mytable SET col1 replace
  • 如何在Rails模型的Rspec测试中禁用belongs_to :touch选项?

    拥有大型模型堆栈并广泛使用娃娃缓存技术 最终会在模型更新后 触及 许多父模型 在测试时 这似乎是浪费时间 除非您尝试专门测试该功能 有没有办法防止模型touch their belongs to测试环境或测试级别的关联 更新1 我对此案的第