質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.19%

rspecにおけるデータの作成について

受付中

回答 0

投稿

  • 評価
  • クリップ 0
  • VIEW 282

arinc0

score 31

solidusを利用したECサイトを作成しているのですが、
現在rspecテストを書いており上手くデータが作成できない為困っております。

add_search_scope :with_option_value do |option, value|
  option_values = Spree::OptionValue.table_name
  option_type_id = case option
    when String then Spree::OptionType.find_by(name: option) || option.to_i
    when Spree::OptionType then option.id
    else option.to_i
    end

  conditions = "#{option_values}.name = ? AND #{option_values}.option_type_id = ?", value, option_type_id

  group('spree_products.id').joins(variants_including_master: :option_values).where(conditions)
end


上記のwith_option_valueを用いて商品を絞り込んで表示を行います。

def show
  @products = filter_products
end

def filter_by_color(color)
  products = Spree::Product.with_option_value('tshirt-color', color)
  products_filter_by_color = []
  products.each do |product|
    products_filter_by_color << product if product.taxons.pluck(:id).any? { |i| Spree::Taxon.find(params[:id]).self_and_descendants.pluck(:id).include?(i) }
  end
  @products_filter_by_color = products_filter_by_color
end

def filter_products 
  if params[:color]
    filter_by_color(params[:color])
    @products_filter_by_color
  end
end


動作は一応確認が取れているのですがrspecのデータ作成が上手くできていない、もしくは書き方が違う為テストが通りません。

describe 'カラーフィルター' do
  let!(:taxonomy) { create(:taxonomy) }
  let!(:taxon) { create(:taxon, taxonomy: taxonomy) }
  let!(:product) { create(:product, name: 'RUBY ON RAILS TEE', taxons: [taxon], option_types: [option_type_1]) }
  let!(:other_product) { create(:product, name: 'RUBY ON RAILS MUG', taxons: [taxon]) }
  let!(:option_type_1) { create(:option_type, presentation: 'Color', name: 'tshirt-color', option_values: [option_value_1], id: 1) }
  let!(:option_value_1) { create(:option_value, name: 'Blue', option_type_id: 1) }

  it '選択した色に関連する商品が表示されること' do
     visit potepan_category_path(taxon.id, color: 'Blue')
     within('div.productBox') do
       expect(page).to have_content 'RUBY ON RAILS TEE'
       expect(page).not_to have_content 'RUBY ON RAILS MUG'
     end
  end
end


おそらくwith_option_valueで上手くデータが取得できていないような気がします。
(データ作成が上手くできていない為)
ちなみにテストが落ちるのは商品自体が表示されていない為、@productsの中身がない為です。

アドバイスなど頂けたら幸いです。

https://github.com/solidusio/solidus/blob/068395951f6f46d54ccf590779457a3a1875a973/core/app/models/spree/product/scopes.rb#L104

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

まだ回答がついていません

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.19%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る