LoginSignup
0
0

More than 1 year has passed since last update.

RspecでAPIをテストするときにnullをパラメータに含む方法

Last updated at Posted at 2021-11-19

問題

Ruby on Rails の Rspec で JSON を受け取る API をテストするとき、渡すパラメータの値に異常値も入れてテストしておきたいなぁと思います。よくある異常値として null がありますね。
でも、これをテストするのはちょっと難しいです。
なぜなら、チュートリアルでよくあるようにパラメータをハッシュにして API のエンドポイントに渡そうとすると、 null はハッシュの値として認めてもらえず、 ArgumentError になってしまいます。
ハッシュを to_json メソッドでJSONに変えようとしても同じことです。
ではどうしたら null をパラメータに含めてテストすることができるのか、考えました。

解決方法

JSON を文字列として作り、その JSON に null を含めたものを API のパラメータにすればOKです。
コードは以下になります。

null_spec.rb
require "rails_helper"

RSpec.describe "エンドポイントにnullを渡す", :type => :request do

  it "エラーが返ってくる" do
    headers = { "CONTENT_TYPE" => "application/json" }
    post "/path/to/endpoint", :params => '{ "hoge": null} }', :headers => headers
    expect(response.status).to eq 422
  end

end

このコードは次のページのものの改変になります。
https://relishapp.com/rspec/rspec-rails/v/5-0/docs/request-specs/request-spec#providing-json-data

"CONTENT_TYPE" => "application/json" を指定してやるのがキモです。

まとめ

分かっていれば何のつまづきもないところだと思いますが、私はつまづいたので備忘録がわりに残しておきます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0