コントローラーの記述
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の書き方の問題だと思うのですが、
解決方法がわかる方いましたら回答お願い致します。
回答1件
あなたの回答
tips
プレビュー