Как передать аргументы, идентификатор родительского класса «B», когда create () фабрики вызывается из rspec, для дочернего класса A? - PullRequest
0 голосов
/ 02 февраля 2019

Мне нужно написать тест rspec. У меня есть дочерние родительские переменные экземпляра, которые каким-то образом были созданы с помощью фабричного метода создания.Теперь мне нужно создать еще одного ребенка того же родителя.

я вызвал create (: class_a, id: class_b.id)

1 Ответ

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

Исходя из тега и контекста, я предполагаю, что вы используете factory-bot.Если ваши фабрики верны, ваш тест может выглядеть примерно так (я собираюсь переименовать ваши модели 'parent' и 'kid'):

require 'rails_helper'

RSpec.describe Parent, type: :model do
  let(:parent) { create(:parent) }
  let!(:kid1) { create(:kid, parent_id: parent.id) }
  let!(:kid2) { create(:kid, parent_id: parent.id) }

  it 'is has 2 children' do
    expect(parent.kids.length).to eq(2)
    expect(kid1[:parent_id]).to eq(parent.id)
  end
end

Первый оператор let создает экземпляр parent,но только после того, как переменная «родитель» используется где-то в тесте.Второе и третье операторы let создают 2 разных экземпляра класса kid с именами 'kid1' и 'Kid2'.Обратите внимание!после оператора let?Это значит, создавать детей прямо сейчас.И когда создаются дочерние элементы, создается и родительский элемент, поскольку при создании дочерних элементов используется переменная parent.

Теперь вы можете писать тесты, подобные тому, который находится внутри блока it.

...