RspecでHTTPのリクエスト・レスポンスのテストを行った

rspecでHTTPのリクエスト・レスポンスのテストを行った。

今回も、ごみシリーズです。

ごみ収集日の検索をLineからできるようにした - takapi86のブログで、APIを作っていく中で、rspecでのテストでHTTPのリクエスト・レスポンスのテストができるということを知ったので、メモして起きます。

事前準備

  • 以下のgemはインストール済みである前提で行います。

対象

  • ごみ収集日の検索をLineからできるようにした。にも書いてありますが、ゴミ収集APIには以下のエンドポイントがあります。
    • 収集場所コードから収集場所のスケジュールを返すAPI
    • 収集場所名を前方一致で検索し、一覧で返すAPI
    • 上記2つのAPIを使い、Lineでメッセージを受け取り、スケジュールや収集場所一覧を返すAPI

今回は上記のうち、収集場所名を前方一致で検索し、一覧で返すAPIのテストを書きたいと思います。

導入

rspecのテストファイルは以下の場所 * spec/requests/towns_spec.rb

  • 今回はTownsControllerのテストで、リクエストを投げて確認するため、以下のように記述します。
describe TownsController, type: :request do
end
  • エンドポイントはGETメソッドで、/towns/:nameなので以下のように記述します。
describe TownsController, type: :request do
  describe 'GET /towns/:name' do
  end
end
  • ステータスコードは200で返ってくるのを期待するテストを追加します。
  • ここでは省略していますが、事前にFactoryGirl等でテストデータを生成するようにすると良いでしょう。
describe TownsController, type: :request do
  describe 'GET /towns/:name' do
    it '200 OK を返す' do
      get URI.escape("/towns/#{"日吉"}")
      expect(response.status).to eq(200)
    end
  end
end
  • 事前にFactoryGirl等でテストデータを生成するようにすると良いでしょう。
  • テストを実行してみましょう。
bundle exec rspec spec/requests/towns_spec.rb
Finished in 0.50264 seconds (files took 3.08 seconds to load)
1 example, 0 failures

正常にテストが終了したようです。

今回は、test環境にデータが入った状態でテストを行いましたが、 先ほど言ったように事前にFactoryGirl等でテストデータを生成するようにすると良いでしょう。