Подтвердить что ты не робот

Как получить доступ к has_many моделям, созданным в предложении

Существует класс Company, который has_many QuarterValue, и у меня есть RSpec-тест для него.

  let(:company) { Company.create }
  describe 'company has many quarter values' do
    before do
      10.times { create(:quarter_value, company: company) }
    end
    it 'has 10 quarter values' do
      expect(company.quarter_values.count).to eq(10)
    end
  end

Тест проходит. Мой вопрос заключается в том, что я положил binding.pry чуть выше expect -сервера, я не могу получить доступ к company.quarter_values, который возвращает пустой массив [].

Как я могу получить доступ к объекту has_many моделей в тесте RSpec с помощью binding.pry?

спецификации /factories.rb

FactoryGirl.define do
  factory :company do
    sequence(:code) { |n| n + 1000 }
  end
  factory :quarter_value do
    company
  end
end
4b9b3361

Ответ 1

Вам нужно изменить свой код, чтобы он выглядел следующим образом:

let(:company) { Company.create }
describe 'company has many quarter values' do
  before do
    10.times { create(:quarter_value, company: company) }
    company.reload
  end
  it 'has 10 quarter values' do
    expect(company.quarter_values.count).to eq(10)
  end
end

Переменная компании, созданная в начале, не знает, что ей была дана quarter_values. Вам нужно позвонить company.reload, чтобы обновить компанию новыми отношениями, которые он дал, потому что этот экземпляр модели Company не участвовал в create(:quarter_value, company: company)

Ответ 2

Вы должны reload объект company в блоке before или внутри сеанса pry при отладке.

Это

Перезагружает атрибуты этого объекта из базы данных.