json の テストで gem の json_expressions を使ってみる
Ruby Ruby on Rails
Published: 2019-07-29

やったこと

rspec で json_expressions を使ってみます。

利用シーンとしては、Web API で返却される json の型をチェックする時などです。

確認環境

$ ruby --version
ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-darwin17]

$ rails --version
Rails 5.2.3

$ gem list | grep rspec-rails
rspec-rails (3.8.2)

調査

インストール

Gemfile

gem 'json_expressions'
$ bundle install

テスト対象の処理

app/controllers/users_controller.rb

class UsersController < ApplicationController
  def show
    data = {
      user: {
        id: 1,
        type: 'userType1',
        type2: 'userType2',
        point: 2300,
        is_valid: true
      }
    }
    render :json => data
  end
end

rspec を書く

spec/controllers/users_controller_spec.rb

require 'rails_helper'
require 'json_expressions/rspec'

module Boolean; end
class TrueClass; include Boolean; end
class FalseClass; include Boolean; end

RSpec.describe UsersController, type: :controller do
  describe "GET #show" do
    it "returns a user" do
      pattern = {
        user: {
          id: Integer,
          type: String,
          point: Integer,
          is_valid: Boolean,
        }.ignore_extra_keys!
      }

      get :show
      expect(response.body).to match_json_expression(pattern)
    end
  end
end

ignore_extra_keys! を指定することでテスト対象のキーを絞り込むことができます。

Boolean かどうかのテストをするための対応も必要でした。

参考