Что-то вроде:
factory :profile, class: 'Profile', do
...
end
factory :coupon, class: 'Coupon' do
...
end
factory :coupon_profile, class: 'CouponProfile' do
coupon
profile
end
Честно говоря, ваш лучший выбор - просмотреть GETTING_STARTED README для FactoryBot - там есть все, что вы хотите знать, с примерами.
Для своих спецификаций контроллера вы просмотрели документацию по спецификациям Rspec ? Вы должны быть в состоянии сделать что-то вроде:
describe 'CouponsController' do
subject(:request) { '/index', params: params }
shared_examples_for 'success' do
it do
request
expect(response).to have_http_status(:success)
end
end
describe '#index' do
context 'empty params' do
let(:params) { {} }
it_behaves_like 'success'
end
context 'profile_id present' do
let(:params) { { profile_id: profile.id } }
let!(:profile) { coupon_profile.profile }
let(:coupon_profile) { create :coupon_profile }
it_behaves_like 'success'
end
end
end