如何访问在before子句中创建的has_many模型

iro*_*and 13 rspec ruby-on-rails ruby-on-rails-4 factory-bot

有一个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
Run Code Online (Sandbox Code Playgroud)

测试通过.我的问题是,当我放在我无法访问binding.pry的expect匹配器上方时company.quarter_values,返回空数组[].

如何使用?访问测试中的has_many模型对象?RSpecbinding.pry

投机/ factories.rb

FactoryGirl.define do
  factory :company do
    sequence(:code) { |n| n + 1000 }
  end
  factory :quarter_value do
    company
  end
end
Run Code Online (Sandbox Code Playgroud)

Loc*_*kyy 3

您需要将代码修改为如下所示:

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
Run Code Online (Sandbox Code Playgroud)

您在开始时创建的 company 变量并不知道它已被赋予任何quarter_values. 您需要致电company.reload以更新公司的新关系,因为该Company模型的实例未涉及create(:quarter_value, company: company)