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

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

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

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

RSpec

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

Q&A

解決済

1回答

4186閲覧

RSpecでcreateのテストが通らない、値がNULLになって保存されてしまう。

taiga39

総合スコア18

Ruby on Rails 5

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

RSpec

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

0グッド

0クリップ

投稿2019/03/20 08:12

コントローラーの記述

class Api::V1::ProductsController < ApplicationController def create begin @product = Product.new(product_params) @product.save! render json: (@product),status:201 rescue => error render json: (error),status:404 end end private def product_params params.permit(:title, :body,:image,:price) end end

requestsの記述

describe "登録するとき" do before do @product = FactoryBot.attributes_for(:product) end it "商品情報が登録される" do expect do post "/api/v1/products",params:{product:@product} end.to change{Product.count}.by(1) expect(response.status).to eq 201 end

factory_botの記述

FactoryBot.define do factory :product do title {"title"} body {"bodobodybody"} image {"imageurl"} price {1500} end end

RestAPIを作成するために上記の記述を行いました。
しかしRSpecを実行してもテストのデータがDBに保存されず、カラムの値がNULLとなってしまいます。
(idやcreated_atといった情報は入力され保存されます。)

テストコードの意図は、
①factory_botで保存するデータの作成
②①で作成したデータをポスト
③ポストを行ったことでデータが一つ増えたかどうかを確認
④saveに成功したときのステータスコードが返ってきてるかを確認
ということを行っているつもりです。

post "/api/v1/products",params:{product:@product}
の下にbinding.pryを使い、@productのデータを確認したところNULLにはなっていませんでした。

ローカル環境では動作していて、json形式でレスポンスがあります。
単純にRspecの書き方の問題だと思うのですが、
解決方法がわかる方いましたら回答お願い致します。

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

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

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

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

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

gouf

2019/03/20 13:16

テスト結果のエラーメッセージはどのような内容が表示されていますか?
guest

回答1

0

自己解決

自己解決しました

post "/api/v1/products",params:{product:@product}

post "/api/v1/products",params:@product

とすることでうまくいきました。

投稿2019/03/21 02:05

taiga39

総合スコア18

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問