コピペコードで快適生活

明日使えるソースを自分のために

Rspec

RSpecで既存のクラスをモックに差し替える

本来はDependencyInjectionでやるべきかもだけど。 そうもいかないケースもあるわけで。 # 既存クラス let(:api_client) { ::MyApp::ApiClient } let(:api_response) { double('api_response', status: 200) } # post_xxxメソッドを上書きして、api_response…

Rails+RspecでActionMailerのテスト

Rsils+RspecでActionMailerのテストの書き方知らなかったのでメモ。 ## 設定 config.action_mailer.delivery_method = :test ## テスト expect(ActionMailer::Base.deliveries.size).to eq(1) # メールを送った件数 expect(ActionMailer::Base.deliveries.fi…

RailsEngineを作る手順メモ

RailsEngineを作る手順を雑にメモする。 Docker/Rspecを使う前提。 docker設定 Dockerfile FROM ruby:2.6.6 ENV NODE_VERSION 10.12.0 ENV BUNDLER_VERSION 1.17.3 ENV LANG C.UTF-8 # https://stackoverflow.com/questions/55361762/apt-get-update-fails-w…

Rspecでcontrollerのテスト

controllerのテストをまともに書いたことなかったので。 describe TestController, type: :controller do let(:account) { create(:account) } describe 'auth' do context '有効なトークンを渡したとき' do before do token = TokenService.build_token(acc…

RSpecで例外チェック

これまでbegin-rescueで愚直にやってたので、もう少しシュッとした書き方を。 require 'spec_helper' describe TokenService do describe :validate! do context '改ざんしたトークンを渡す' do # 処理を定義 subject { token = TokenService.build_token To…

RSpecのmockの使い方

APIクライアントを外から注入できるようにして、 モックを渡してローカル環境単体でテストできようにした例。 require 'spec_helper' class DummyService # # APIクライアントを外から指定できるようにして # 単体でテストできるようにする # def self.get_i…

RSpecのletの使い方 - before&インスタンス変数使うやり方との比較

ずっとbefore&インスタンス変数でやってたので、let使うやり方をメモしておく。 require 'spec_helper' describe 'beforeとletの違いについて' do context 'インスタンス変数を使う場合' do before do @account = create(:account) end it 'アカウントが存…

Grape+Rspec環境でAPIをテストする

既存RailsアプリにRspecを入れる - コピペコードで快適生活 の続き。まず、JSONのテストを簡単にするgemを入れる。 gem 'json_expressions' テストコードはこんな感じで書ける。 require 'rails_helper' require 'json_expressions/rspec' describe "GET api…