来自工厂的 MiniTest parent 和 child 正在测试中

MiniTest parent and child from factory in test

我在 运行 我的测试中遇到以下错误。
NoMethodError: undefined method 'departure_date' for nil:NilClass

这是测试。

  test "successful disbursement should respond with success" do

    post :disbursement, {id: @invoice.invoice_id, trip: attributes_for(:trip)}
    assert_response :success
  end

在测试的设置部分,我正在创建以下内容。

  setup do
    @controller = Api::V1::InvoicesController.new
    @invoice = create(:invoice)
    @trip = create(:trip)
  end

trip工厂是这样的

FactoryGirl.define do
  factory :trip do
    depart_airport "MCI"
    arrive_airport "ORD"
    passenger_first_name "Joe"
    passenger_last_name "Business"
    passenger_count 1
    departure_date {10.days.from_now}
    invoice
  end

end

发票工厂看起来像这样。

FactoryGirl.define do
  factory :invoice do
    sequence(:invoice_id) { |n| "INV#{n}"}
    merchant
    amount 500.00
    item_count 5
    paid false
    currency "GBP"
    invoice_type "pre-flight"
  end

end

不太明白如何确保发票有行程。我猜这就是为什么测试找不到它应该找到的 departure_date 的原因。

据我了解,您试图将行程和发票关联起来。如果我的理解是正确的,试试这个。

setup do
    @controller = Api::V1::InvoicesController.new
    @invoice = create(:invoice)
    @trip = create(:trip, invoice: @invoice)
  end