title: “ [Gem] Webmock RSpecのWebアクセスのモックを作成してくれる超便利Gem [Rails]”
category: Rails

👽 tags: [Rails, Ruby, Gem]

Where?WebからデータをダウンロードするプログラムのRSpecで、Webにいちいちアクセスしたくない場合に重宝するのが、「Webmock」です。これを使えばある時点のデータを使えるので、テスト結果が更新されて変わるような事態を防ぐことができます!

bblimke/Webmock · GitHub


🐞 Gemのインストール

いつ戻おりGemfileに以下を追加して、bundle installを実行してください。

group :test do
# HTTP requests用のモックアップを作ってくれる
gem 'webmock'
end

🎂 Webモックの使い方

使い方もいたって簡単です。いつものRSpecファイルに次のような記述を追加を追加。

require "spec_helper"
require "webmock/rspec"
# これをつけておくとEXAMPLE_SITE_URL以外は普通にWebにアクセス
# すべてのhttpリクエストを行わない場合は、下を削除
WebMock.allow_net_connect!
EXAMPLE_SITE_URL = "http://www.iana.org/domains/example/"
describe "" do
before do
# EXAMPLE_SITE_URL にアクセスしたら EXAMPLE_SITE_BODY を返すスタブを作成
stub_request(:get, EXAMPLE_SITE_URL).to_return({:body => EXAMPLE_SITE_BODY,:status => 200})
@doc = Nokogiri::HTML(open(EXAMPLE_SITE_URL))
@title = @doc.search("title").inner_text
end
subject { @title }
it { should == "Koreha Example Domain" }
end
# テスト用のフィード
EXAMPLE_SITE_BODY = <<-EOF
<!doctype html>
<html>
<head>
<title>Koreha Example Domain</title>
<meta charset="utf-8" />
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<style type="text/css">
body {
background-color: #f0f0f2;
margin: 0;
padding: 0;
font-family: "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;
}
div {
width: 600px;
margin: 5em auto;
padding: 3em;
background-color: #fff;
border-radius: 1em;
}
a:link, a:visited {
color: #38488f;
text-decoration: none;
}
@media (max-width: 600px) {
body {
background-color: #fff;
}
div {
width: auto;
margin: 0 auto;
border-radius: 0;
padding: 1em;
}
}
</style>
</head>
<body>
<div>
<h1>Example Domain</h1>
<p>This domain is established to be used for illustrative examples in documents. You do not need to
coordinate or ask for permission to use this domain in examples, and it is not available for
registration.</p>
<p><a href="http://www.iana.org/domains/special">More information...</a></p>
</div>
</body>
</html>
EOF

もし、興味があればぜひチャレンジしてみてください!

bblimke/Webmock · GitHub

🍣 参考リンク

外部に HTTP アクセスする機能の単体テストで WebMock 使ってみた - present

🤔 変更来歴

01/22 14:55 Gemfileのgroupをdevelopment => testに変更

📚 おすすめの書籍

🖥 サーバについて

このブログでは「Cloud Garage」さんのDev Assist Program(開発者向けインスタンス無償提供制度)でお借りしたサーバで技術検証しています。 Dev Assist Programは、開発者や開発コミュニティ、スタートアップ企業の方が1GBメモリのインスタンス3台を1年間無料で借りれる心強い制度です!(有償でも1,480円/月と格安)