ブログの Feed をダウンロードする機能の単体テストで、いちいち本物の Feed にアクセスしたくない。テスト遅くなるし、Feed 更新されたらテスト結果変わっちゃうし。
こういうときはスタブやモックの出番。WebMock という gem を使うことにした。
WebMock はメジャーどころの http ライブラリに対応しているので、Net::Http 以外のときでも使えるのがウレシイ。
require "spec_helper" require "webmock/rspec" FEED_LINK = "http://tnakamura.hatenablog.com/feed" describe Feed do before do # FEED_LINK にアクセスしたら FEED_BODY を返すスタブを作成 stub_request(:get, FEED_LINK).to_return({ :body => FEED_BODY, :status => 200, }) end it "フィードをダウンロードして保存できる" do @feed = Feed.create_from_feedlink(FEED_LINK) @feed.title.should eq("present") @feed.link.should eq("http://tnakamura.hatenablog.com/") end end # テスト用のフィード FEED_BODY = <<-EOF <feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ja"> <title>present</title> <link href="http://tnakamura.hatenablog.com/"/> <updated>2012-12-17T20:30:04+09:00</updated> <author> <name>griefworker</name> </author> <generator uri="http://blog.hatena.ne.jp/" version="280c049171b3c27b6e6bc0ff0982be84">Hatena::Blog</generator> <id>http://blog.hatena.ne.jp/id/12704346814673850430</id> <entry> <title>Johan</title> <link href="http://tnakamura.hatenablog.com/entry/2012/12/17/203003"/> <id>http://tnakamura.hatenablog.com/id/12704830469096482706</id> <updated>2012-12-17T20:30:03+09:00</updated> <summary>福岡三越地下2階にある Johan でパンを買ってみた。三越に行くには天神地下街をかなり南下しないといけないから、昼休みに気安く行けないのが難点。 今回のお目当てはチョコブレッド。Johan の横を通るたびに目に入るから気になっていたんだけど、売上4位の人気商品だったのか。生地の</summary> <content type="html"><p>福岡三越地下2階にある Johan でパンを買ってみた。</content> <category term="食べ歩き" label="食べ歩き" /> <author> <name>griefworker</name> </author> </entry> <entry> <title>Evergreen を導入したばかりだけど Konacha に移行した</title> <link href="http://tnakamura.hatenablog.com/entry/2012/12/13/060729"/> <id>http://tnakamura.hatenablog.com/id/12704830469096352314</id> <updated>2012-12-13T06:07:29+09:00</updated> <summary> 先日 Evergreen を導入したけど Evergreen は今メンテされてないってコメントで教えてもらった。確かに、README よく見たら書いてあるし…。完全に見落としてた。不覚。README のリンク先、Google グループのスレッドでは Konacha っていう R</summary> <content type="html"> <div class="section"> <h4>先日 Evergreen を導入したけど</h4> </content> <category term="Ruby" label="Ruby" /> <author> <name>griefworker</name> </author> </entry> <entry> <title>Evergreen で Rails アプリの JavaScript を単体テストする</title> <link href="http://tnakamura.hatenablog.com/entry/2012/12/11/213800"/> <id>http://tnakamura.hatenablog.com/id/12704830469096340501</id> <updated>2012-12-11T21:38:00+09:00</updated> <summary> はじめに Rails アプリの JavaScript のテストは capybara(+capybara-webkit) を使えば一応できるけど、統合テストなのがね…。統合テストもちゃんと書くけど、やりたいのは JavaScript の単体テストなのに。 そこで Evergree</summary> <content type="html"> <div class="section"> <h4>はじめに</h4> </content> <category term="Ruby" label="Ruby" /> <author> <name>griefworker</name> </author> </entry> </feed> EOF
たいへん便利だ。