こんにちは、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 を書いていきたいと思います。
最後に、エンジニアとかプログラマとか募集中 です!