ruby-on-rails - 如何测试 ActiveRecord 关联是否与 RSpec 一起使用?
问题描述
查看他们的 Active Record 关联是否不再被使用的最佳方法是什么?如何编写 rspec 测试以查看关联是否不再被使用?
我必须重构其他人(不再是项目的一部分)的 Rails 模型。目前,我正在使用 atom 查看是否在存储库的其他地方调用了关联,但我知道这不是最好的方法。我想为模型构建单元测试,但不完全确定如何处理关联。目前,我正在使用 shoulda 匹配器和 factory_girl_rails。
解决方案
至少有两种使用关联的方式:
显式 - 调用一个对象。
object.association_name
在这种情况下,很容易跟踪:
expect_any_instance_of(Model).to_not receive(:association_name)
另一个问题是在您的测试结构中放置这种期望的位置。
隐式 - 在复杂查询或关联数据预加载中。
Model.all.joins(:association_name) Model.all.includes(:association_name)
在这种情况下,很难跟踪。
我建议另一种方法:
不要跟踪关联使用情况,而是在删除关联时检查测试是否通过。您可以安全地删除测试环境的关联。
例如,您可以替换它:
has_many :association_name
有了这个:
unless Rails.env.test?
has_many :association_name
end
这不会破坏任何东西,并且仅在运行测试时并且仅当在某处使用关联时才会引发错误。
推荐阅读
- python - 不能用 XPath 细化元素文本
- php - 如何在 PHP 中将逗号分隔的键值字符串转换为关联数组
- c# - [A]Oracle.ManagedDataAccess.Client.OracleParameter 无法转换为 [B]Oracle.ManagedDataAccess.Client.OracleParameter
- flutter - Flutter如何重构小部件列表
- sql - SQL 错误 [42601]:错误:“0”处或附近的语法错误
- crm - 如何解决 Vtiger 错误:更改配置文件权限时出现“重复配置文件”
- go - 使用 big.Int int 编写帕斯卡三角形
- javascript - 显示为未定义的参数 - 导出的函数 JavaScript
- asp.net - 如何使用 asp.net 下载多个 zip 文件
- python - Python:使用 For 循环为未确定的嵌套级别创建 XML 嵌套标签字典