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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

RSpec

RSpecはRuby用のBDD(behaviour-driven development)フレームワークです。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

0回答

2396閲覧

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

arinc0

総合スコア31

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

RSpec

RSpecはRuby用のBDD(behaviour-driven development)フレームワークです。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2020/01/11 18:49

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

scope

1add_search_scope :with_option_value do |option, value| 2 option_values = Spree::OptionValue.table_name 3 option_type_id = case option 4 when String then Spree::OptionType.find_by(name: option) || option.to_i 5 when Spree::OptionType then option.id 6 else option.to_i 7 end 8 9 conditions = "#{option_values}.name = ? AND #{option_values}.option_type_id = ?", value, option_type_id 10 11 group('spree_products.id').joins(variants_including_master: :option_values).where(conditions) 12end

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

controller

1def show 2 @products = filter_products 3end 4 5def filter_by_color(color) 6 products = Spree::Product.with_option_value('tshirt-color', color) 7 products_filter_by_color = [] 8 products.each do |product| 9 products_filter_by_color << product if product.taxons.pluck(:id).any? { |i| Spree::Taxon.find(params[:id]).self_and_descendants.pluck(:id).include?(i) } 10 end 11 @products_filter_by_color = products_filter_by_color 12end 13 14def filter_products 15 if params[:color] 16 filter_by_color(params[:color]) 17 @products_filter_by_color 18 end 19end 20

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

rspec

1describe 'カラーフィルター' do 2 let!(:taxonomy) { create(:taxonomy) } 3 let!(:taxon) { create(:taxon, taxonomy: taxonomy) } 4 let!(:product) { create(:product, name: 'RUBY ON RAILS TEE', taxons: [taxon], option_types: [option_type_1]) } 5 let!(:other_product) { create(:product, name: 'RUBY ON RAILS MUG', taxons: [taxon]) } 6 let!(:option_type_1) { create(:option_type, presentation: 'Color', name: 'tshirt-color', option_values: [option_value_1], id: 1) } 7 let!(:option_value_1) { create(:option_value, name: 'Blue', option_type_id: 1) } 8 9 it '選択した色に関連する商品が表示されること' do 10 visit potepan_category_path(taxon.id, color: 'Blue') 11 within('div.productBox') do 12 expect(page).to have_content 'RUBY ON RAILS TEE' 13 expect(page).not_to have_content 'RUBY ON RAILS MUG' 14 end 15 end 16end

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

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

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問