1

ベンダーのリストをコントローラーに送信するコントローラーがあり、通常のビューでは正常に機能しています。

class VendorsController < ApplicationController

  respond_to :html, :json

  def index
    @vendor_categories = VendorCategory.where(:is_top_level => true)
    @vendors = Vendor.includes(:vendor_tier, :vendor_categorizations, :vendor_categories).order('vendor_tier_id DESC, name ASC')

    respond_with @vendors
  end
end

私の見解では、次の2行があります。

= debug @vendors
= debug current_user.user_vendor_choices

これも、ブラウザで表示すると機能します。しかし、Capybara と RSpec でテストすると、空です。

require 'spec_helper'

describe 'Vendors' do
  before do
    category = create(:vendor_category)

    5.times do 
      vendor = create(:vendor)
      vendor_categorization = create(:vendor_categorization, vendor: vendor, vendor_category: category)
      p vendor
      p category
      p vendor_categorization
    end

    visit signup_path

    @new_user = sign_up
  end

  before(:each) do
    visit destroy_user_session_path
    visit new_user_session_path
    sign_in @new_user
    visit vendors_path
  end

  it 'should save selected vendors', js: true do
    p Vendor.includes(:vendor_tier, :vendor_categorizations, :vendor_categories).order('vendor_tier_id DESC, name ASC').count
  end

end

Vendor.all上記Vendor.includes...は両方とも値を返しますが、何らかの理由で私のテストでは何も表示されません... Capybara::Element not found.

アップデート

テスト目的で、コントローラーを使用してベンダーを直接作成しました。

  def index

    @vendor_categories = VendorCategory.where(:is_top_level => true)
    4.times do
      Vendor.create({name: 'Test McTesterson', vendor_tier_id: 1})
    end
    @vendors = Vendor.includes(:vendor_tier, :vendor_categorizations, :vendor_categories).order('vendor_tier_id DESC, name ASC')

    respond_with @vendors
  end

スペック合格。なに--? これは FactoryGirl の問題であるに違いありませんか、それとも何らかの理由で、テストを実行する前に私のレコードが削除されているのでしょうか? オブジェクトを作成した後にオブジェクトを慰めると、ID を持つレコードが表示されます。これは、それらがデータベースに入れられていることを証明していないと思います...

4

2 に答える 2