2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Rspecでgrapeのヘルパーメソッドのスタブを定義する方法

Posted at

この記事で書いていること

Railsでgrapeを使用してAPIを作成している人に向けて、grapeのヘルパーメソッドのスタブをRspecで作成する方法をまとめています。

よって、grapeについての説明や導入方法などは割愛しています。

環境

Ruby:2.3
Rails:4.2.6
ちょっと古いです。すみません。

ディレクトリ構成

|-app
|  |-api
|     |-v1
|     |  |-test.rb
|     |  |-helper.rb
|     |  |-root.rb
|     |-api.rb
|-spec
   |-api
      |-v1
         |-test_spec.rb

上記以外にもファイルがありますが、必要なもののみ記載しています。

APIの内容

こちらも必要な部分のみ記載しています。

app/api/api.rb
module API
class Root < Grape::API
    prefix 'api'
    mount V1::Root
  end
end
app/api/v1/root.rb
module V1
  class Root < Grape::API
    version 'v1'
    format :json
    content_type :json, 'application/json;charset=UTF-8'

    helpers Helper

    mount V1::Test
  end
end
app/api/v1/helper.rb
module V1
  module Helper
    def success?
      # 何かしらの処理(戻り値はtrue or false)
    end
  end
end
app/api/v1/test.rb
module V1
  class Test < Grape::API
    resource :test do
      # GET /api/v1/test
      desc 'テストAPI'
      get '/' do
        # 何かしらの処理
      end
    end
  end
end

Rspecの内容

spec/api/v1/test_spec.rb
require 'rails_helper'

describe Test, type: :request do
  
  describe 'TestAPI' do
    context '実行' do
      before do
        # ヘルパーメソッドのスタブ作成
        Grape::Endpoint.before_each do |endpoint|
          allow(endpoint).to receive(:success?).and_return(true)
        end
      end

      after do
        # ヘルパーメソッドのスタブ削除
        Grape::Endpoint.before_each nil
      end

      # 以降、APIのテストを記述
    end
  end
end

beforeでスタブを作成しています。
Grape::Endpoint.before_eachメソッドを使用することでヘルパーメソッドの動作を定義できます。
ここではsuccessメソッドの結果がtrueになるようにしています。

注意しなければならないのは、定義したスタブは以降のdescribeやcontext、exampleに引き継がれるということです。

この例ではsuccessメソッドは以降trueを返すようになるので、テストの内容によっては想定外の結果になる可能性があります。

よってスタブが不要になった時点で削除してあげる必要があります。
削除するにはGrape::Endpoint.before_each nilと定義します。

参考

2
1
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
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?