如何在 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 &lt;&lt; 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) 中创建或指定关联?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Perl 中创建或测试 NaN 或无穷大?

未初始化的常数 Rspec

如何使用“如果存在”在 MySQL 中创建或删除索引?

使用 Rails 3.2.11 和 RSpec 发布原始 JSON 数据

在rails 2.3+中测试(rspec)嵌套模型部分

如何在自定义 Xcode 项目模板中创建或定义新目标