Исходя из тега и контекста, я предполагаю, что вы используете 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.