ベンダーのリストをコントローラーに送信するコントローラーがあり、通常のビューでは正常に機能しています。
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 を持つレコードが表示されます。これは、それらがデータベースに入れられていることを証明していないと思います...