如何在 RSpec (rails) 中创建或指定关联?
Posted
技术标签:
【中文标题】如何在 RSpec (rails) 中创建或指定关联?【英文标题】:How to create or specify associations in RSpec (rails)? 【发布时间】:2021-09-14 00:59:00 【问题描述】:有两种型号: 学生和科目
通过这些关联:
class Student < ApplicationRecord
has_many :subjects
end
class Subjects < ApplicationRecord
belongs_to :student
end
在 controllers 中,我可以输入以下内容以获取 id=1 的 student 正在学习的科目:
subjects = Student.find(1).subjects
问题:我如何在 RSpec 中对工厂做同样的事情?
在我的测试中,我有以下几点:
let(:student) create(:student)
let(:subjects) create_list(:subject, rand(10), student: student)
但是,执行以下操作会产生空集合:
student.subjects
【问题讨论】:
也许rand(10)
返回零
【参考方案1】:
所以我要回答我自己的问题。
很简单:
student.subjects << subjects
student.subjects .class
现在将是 Subject::ActiveRecord_Associations_CollectionProxy
reference
【讨论】:
您也可以在主题上使用let!
,例如:let!(:subjects) create_list(:subject, rand(10), student: student)
。 let
是惰性求值的,而 let!
总是被调用。更多信息:relishapp.com/rspec/rspec-core/v/2-5/docs/helper-methods/…以上是关于如何在 RSpec (rails) 中创建或指定关联?的主要内容,如果未能解决你的问题,请参考以下文章