やったこと
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 かどうかのテストをするための対応も必要でした。