Как определить два новых атрибута в фабрике, которая определена внутри другой фабрики в RSpec? - PullRequest
0 голосов
/ 22 февраля 2019

У меня есть две модели с именами Student и Teacher.Оба они имеют одинаковые поля, такие как name, age и т. Д. Кроме Teacher имеет два дополнительных атрибута qualification и college.Теперь для написания rspec я решил создать фабрики для того же, что и ниже:


FactoryGirl.define do
  factory :student do
    type 'student'

    factory :teacher do
      type 'teacher'
      qualification BA
      college XYZ
    end
  end
end

Я определил teacher внутри student, потому что оба они имеют одинаковые атрибуты, кроме того, что teacher имеет два дополнительных атрибута,Я добавил атрибуты, как указано выше, но выдал ошибку как:


  1) Teacher#default_value_for 
     Failure/Error: it { expect(subject.qualification).to be_false}

     NoMethodError:
       undefined method `qualification' for #Student:0x0000000e8c0088'

Finished in 1.75 seconds (files took 14.48 seconds to load)
1 example, 1 failure

Как добавить эти атрибуты в Teacher фабрика?

Спасибо

Ответы [ 2 ]

0 голосов
/ 23 февраля 2019

Я решил вышеупомянутую проблему, удалив вложения на фабриках.


FactoryGirl.define do
  factory :student do
    type 'student'
  end

 factory :teacher do
   type 'teacher'
   qualification BA
   college XYZ
 end
end

Это привело к созданию двух разных фабрик на одной фабрике.:)

0 голосов
/ 22 февраля 2019

Если ваши модели Student и Teacher представляют собой 2 разных класса без наследования, вы не можете делать то, что пытаетесь достичь.

Согласно источнику FactoryBot :

Вы можете легко создать несколько фабрик для одного и того же класса без повторения общих атрибутов путем вложения фабрик

factory :post do
  title { "A title" }

  factory :approved_post do
    approved { true }
  end
end

Вы можете написать вложенныефабрики, если Teacher наследует класс Student.
Пример здесь: как определить фабрики с моделью наследования пользователя

...