jri*_*iff 5 activerecord ruby-on-rails fixtures
我有一个模型"SoftwareVersion"的夹具:
testing:
id: 4
version: "4.0"
file_name: MyString4
is_testing: true
Run Code Online (Sandbox Code Playgroud)
并且模型的默认范围:
default_scope where(is_testing: false)
Run Code Online (Sandbox Code Playgroud)
如果我在测试中这样做:
software_versions(:testing)
Run Code Online (Sandbox Code Playgroud)
我收到一个错误:
ActiveRecord::RecordNotFound: Couldn't find SoftwareVersion with id=4 [WHERE `software_versions`.`is_testing` = 0]
Run Code Online (Sandbox Code Playgroud)
这是预期的行为吗?我该如何覆盖呢?
是的,这是预期的行为,默认范围将影响所有查询。使用 unscoped 再次启动干净的查询:
SoftwareVersion.unscoped.where(is_testing: true)
SoftwareVersion.unscoped.find(id: 4)
etc.
Run Code Online (Sandbox Code Playgroud)
但除此之外,如果您使用同一个表(带有固定装置)来存储生产和测试记录,那么您就做错了。Rails 使用完全不同的数据库进行测试,因此您不需要列来区分。如果您将夹具放在 下test/fixtures
,它们将永远不会加载到生产中。
归档时间: |
|
查看次数: |
347 次 |
最近记录: |