アクトインディ開発者ブログ

子供とお出かけ情報「いこーよ」を運営する、アクトインディ株式会社の開発者ブログです

requests spec を書こう

こんにちは、tahara です。

ちかごろ Rails のテストは requests spec がいいな、と思ってます。

メリットは

  • リクエストの view → controller → model → レスポンスの view と、ひととおりでテストできる。
    • 実運用にそくしたエンドツーエンドテストがあると安心感高い。
  • それでいて capybara-webkit などを使った features テストより速い。
  • config.use_transactional_fixtures = true のままで ok
  • ふつうに binding.pry が使える。

デメリットは

  • capybara-webkit などを使った features テストでは可能な js のテストができない。

では requests spec でのコツみたいなものを2つほど。

User-Agent を指定する

page.driver.header('User-Agent', 'Mozilla/5.0 (iPhone; ...')

foo.js, foo.coffee などの js ビューを返すリクエス

ふつうにやると Accept ヘッダが js を受け付つけないもになっているようで js ではなく html のビューをレンダリングしようとして ActionView::MissingTemplate になってしまいます。 なので次のように Accept ヘッダを変えてやります。

def with_js_accept
  page.driver.header(
    'Accept',
    '*/*;q=0.5, text/javascript, application/javascript'
  )
  yield
ensure
  page.driver.header('Accept', nil)
end

it '...' do
  with_js_accept { click_on 'OFF' }
end

というわけで requests spec を書いていきたいと思います。

最後に、エンジニアとかプログラマとか募集中 です!