0
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 3 years have passed since last update.

RailsのAPIアプリをwebmockでモック化

Posted at

webmockを使ってRailsのAPIのアプリケーションをモック化したので、その備忘録です。

モックとは、簡単に言うとテスト用のダミーアプリケーションです。
APIを利用したサービスのテストで使うことがあります。

今回は以前作ったこちらのAPIアプリをモック化しました。
https://qiita.com/Lmachi/items/464c3cbb9eeb86457935

##スタブ作成

test/stub/bookmark_stub.rb
require 'webmock'

module BookMarkStub
  WebMock.enable!
  WebMock.allow_net_connect!

  WebMock.stub_request(:get, 'http://www.example.com/bookmarks' )
          .to_return(
            body: File.read("#{Rails.root}/test/fixtures/files/get_bookmarks.json"),
            status: 200,
            headers: { 'Content-Type' => 'application/json' }
          )
end

スタブを作成します。
スタブもモック同様にテスト用のダミーです。

モックとスタブの違いについてはこちらの記事をご覧ください。
https://qiita.com/hirohero/items/3ab63a1cdbe32bbeadf1

stub_requestでダミーのエンドポイントを指定しています。
body: File.read()にモックに返すダミーデータのパスを書きます。Bodyを返さない場合はこの行は不要です。

WebMock.allow_net_connect!はstub登録したホスト以外へのアクセスを許可します。
これがないと以下のエラーが発生します。

Real HTTP connections are disabled.
 Unregistered request: GET http://localhost:3000/bookmarks with headers 
{'Accept'=>'application/json', 
'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3',
 'User-Agent'=>'Ruby'} 
You can stub this request with the following snippet: stub_request
(:get, "http://localhost:3000/bookmarks")
. with( headers: { 'Accept'=>'application/json', 
'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 
'User-Agent'=>'Ruby' })
. to_return(status: 200, body: "", headers: {})
 registered request stubs: stub_request
(:get, "http://localhost:3001/bookmarks") 
============================================================

##ダミーデータ作成

test/fixture/files/get_bookmarks.json
[
  {
      "id": 1,
      "title": “hoge”,
      "url": "https://www.hoge.co.jp/",
      "comment": "テスト",
      "created_at": "2021-02-11T09:15:09.492Z",
      "updated_at": "2021-02-11T09:15:09.492Z"
  },
  {
      "id": 2,
      "title": “hogehoge”,
      "url": "https://www.hogehoge.co.jp/",
      "comment": "test",
      "created_at": "2021-02-11T09:15:24.677Z",
      "updated_at": "2021-02-11T09:15:24.677Z"
  }
]

json形式でダミーデータを用意します。
ダミーデータの中身は、元になるAPIサーバーで確認してください。

##スタブを読み込ませる

models/application_resource.rb
require "#{Rails.root}/test/stub/bookmark_stub"

class ApplicationResource < ActiveResource::Base
  self.include_format_in_path = false
end

application_resource.rbを作成し、bookmark_stub.rbを読み込ませます。

##モデル編集

models/bookmark.rb
class Bookmark < ApplicationResource
  self.site = 'http://www.example.com/'.freeze
end

ApplicationResourceを読み込ませ、self.siteをダミーサイトに書き換えます。

以上でモック化は完了です。
##参考
https://qiita.com/ogawatti/items/58bd4fe1180a0acfdd5e

0
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
0
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?