webmockでサイト先のデータをstub化する

人のサイトからスクレイピングをしていて、データを毎回テストしている際に、サイトの内容が変更される場合があります。

予期せぬ不具合に対処が打てなくなるので、サイトの内容をstub化してくれるgemがあります。

GitHub - bblimke/webmock: Library for stubbing and setting expectations on HTTP requests in Ruby.

使い方

rspecで使用する場合です。

対象となるファイルにrequire 'webmock/rspec'で内容を読めるようにします。

これがないと、いつまでも本番のサイトのデータを比較してしまいます。

stub_request(:any, 'www.example.jp').
  to_return(body: 'hoge',
            status: 200,
            headers: { 'Content-Length' => 3 })

stub_requestで対象となるurlをstub化します。

to_return以降で内容を加えていきます。

open('http://www.example.jp')
=> #<StringIO:0x007fa66733e338
 @base_uri=#<URI::HTTP http://www.example.jp>,
 @meta={"content-length"=>"3"},
 @metas={"content-length"=>["3"]},
 @status=["200", ""]>

Net::HTTP.get('www.example.jp', '/')
=> "hoge"

こういう感じできちんと読み込みをしてくれます。

とりあえず、こんなものがあるという紹介です。