首页 > 解决方案 > 如何在 RSpec 中另一个工厂内定义的工厂中定义两个新属性?

问题描述

我有两个名为Student和的模型Teacher。它们都具有相同的字段name,例如age等。除了Teacher有两个额外的属性qualificationcollege。现在为了编写 rspec,我决定为以下内容创建工厂:

FactoryGirl.define 做
  工厂:学生做
    输入“学生”

    工厂:老师做
      输入“老师”
      资格学士学位
      大学 XYZ
    结尾
  结尾
结尾

我定义了teacher内部student,因为它们都具有相同的属性,除了teacher有两个额外的属性。我添加了上面的属性,但它给出了错误:

  1) 教师#default_value_for
     失败/错误:它 { expect(subject.qualification).to be_false}

     无方法错误:
       #Student:0x0000000e8c0088 的未定义方法“资格”

在 1.75 秒内完成(文件加载需要 14.48 秒)
1个例子,1个失败

如何在Teacher工厂中添加这些属性?

谢谢

标签: ruby-on-railsrspecfactory

解决方案


如果您的StudentTeacher模型是没有继承的 2 个不同的类,那么您将无法实现您想要实现的目标。

根据FactoryBot 来源

您可以轻松地为同一个类创建多个工厂,而无需通过嵌套工厂来重复公共属性

factory :post do
  title { "A title" }

  factory :approved_post do
    approved { true }
  end
end

Teacher如果继承类,您实际上可以编写嵌套工厂Student
此处的示例:如何使用继承用户模型定义工厂


推荐阅读