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

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

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

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

RSpec

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

Ruby on Rails

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

Q&A

解決済

1回答

3233閲覧

RSpecのテストを通したい。

sh.o

総合スコア1

Ruby

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

RSpec

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

Ruby on Rails

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

0グッド

0クリップ

投稿2021/05/28 04:40

前提・実現したいこと

railsでRspecのテストを通したい。

発生している問題・エラーメッセージ

エラーメッセージは下記になります。
Failures:

  1. Products GET #show レスポンスが正しく返ってくるか
    Failure/Error: expect(response).to be_success
    expected nil to respond to success?

    ./spec/requests/products_spec.rb:6:in `block (3 levels) in <top (required)>'

  2. Products GET #show 商品ページが表示されるか
    Failure/Error: expect(response).to render_template(:show)

    NoMethodError:
    undefined method `body' for nil:NilClass

    ./spec/requests/products_spec.rb:11:in `block (3 levels) in <top (required)>'

Finished in 0.07303 seconds (files took 8.29 seconds to load)
2 examples, 2 failures

Failed examples:

rspec ./spec/requests/products_spec.rb:5 # Products GET #show レスポンスが正しく返ってくるか
rspec ./spec/requests/products_spec.rb:10 # Products GET #show 商品ページが表示されるか

### 該当のソースコード spec/requests/requests_spec.rb require 'rails_helper' RSpec.describe "Products", type: :request do describe "GET #show" do it "レスポンスが正しく返ってくるか" do expect(response).to be_success expect(response).to have_http_status 200 end it "商品ページが表示されるか" do expect(response).to render_template(:show) end end end products_controller.rb class ProductsController < ApplicationController def show @product = Spree::Product.find(params[:id]) end end ### 試したこと pryでのデバッグ ### 補足情報(FW/ツールのバージョンなど) docker環境でsolidusを使用し、ECサイトを作成している途中でのエラーです。 showアクションが正常に作動するかのテストをしたいです。 2つエラーが出ておりまして、値がnilになっていると思いましたが、pryで@productの中身は入っておりました。 テストコード自体が触るの初めてですので、質問の仕方に不憫な箇所があるかも知れませんが、よろしくお願いします。

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

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

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

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

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

asm

2021/05/28 08:46

spec/requests/requests_spec.rbはコレで全文でしょうか?
sh.o

2021/05/28 10:14

全文になります。 あと記載に誤りがありました。 正しくはspec/requests/products_spec.rbです。
guest

回答1

0

ベストアンサー

リクエストを実行していないのでresponseはありません。

ruby

1get "/path/to"

などとリクエストを行う必要があります。

ここで問題になるのが、どのURLに対してリクエストを行うかです。

Testing Solidus

Solidusを利用してテストを書くために必要な初期の知識
を参考にしてProductのテストデータを投入する必要があります。

適切なrequireなどがされていれば

ruby

1 describe "GET #show" do 2 let!(:product){ create(:product) } 3 before{ get spree.product_path(product) } 4 it "レスポンスが正しく返ってくるか" do 5 #略

が通るような気はします。

投稿2021/05/28 10:43

asm

総合スコア15149

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

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

sh.o

2021/05/29 00:42

asm様ご丁寧にありがとうございます。 教えていただいたコードでRSpec実行してみたところ、 NameError: uninitialized constant Product # ./spec/requests/products_spec.rb:5:in `block (3 levels) in <top (required)>' とエラーが出ました。 見返してみると、controllerのclassがclass Potepan::ProductsController < ApplicationControllerとなっておりまして、これに基づくエラーなのでしょうか?
asm

2021/05/29 03:28

> これに基づくエラーなのでしょうか? いいえ、違います。 let!(:product){ create(:product) }の部分かと思いますが テストデータを用意できない(用意するための設定がされていない)、というエラーです。
sh.o

2021/05/29 13:32

ありがとうございます。 なんとかテスト通過することができましたので解決とさせていただきます。 また機会があればよろしくお願いします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問