RSpec

「let・let!・before」の違いと実行順序(RSpec)

【結論】 ・let/let!はインスタンス変数を定義する際、beforeより分かりやすく記述できる ・beforeはインスタンス変数の定義以外(メソッドの実行など)でも利用することができる ・letは変数が初めて使用された時に評価(遅延評価)され、let!とbeforeはブ…

「describe・context・it(example)」の使い分け(RSpec)

【結論】 ・describeには、テストの対象(グループの範囲)を記述する ・contextには、テストの条件(状態)を記述する ・it(example)には、テストの内容(処理と期待)を記述する 【目次】 「describe・context・it(example)」の使い分け describeにつ…

現在日時をズラしたテストが実行できる「TimeHelpers(travel・travel_back・travel_to)」(Rails)

【結論】 ・ActiveSupportのTimeHelpersでは、時間経過によって動作が変化する機能のテストを行う為のヘルパーメソッドが提供される ・travelメソッドは、現在の日時を指定された日時の分だけ未来または過去の日時に変更する ・travel_toメソッドは、直接指…

テスト環境でcsrf_token(csrf_meta_tags)が出力されない問題への対処法(RSpec)

【結論】 ・RailsにはCSRF保護の仕組みがデフォルトで備わっている ・しかし、CSRF保護はテスト環境ではオフになっており、csrf_tokenがHTMLに埋め込まれない為、それが原因でテストが通らない場合がある ・その場合は、CSRF保護をテスト環境でも有効にする…

RSpecでファイルのダウンロードをテストする方法

【結論】 ・リンクをクリックしてCSVファイルをダウンロードする機能の場合、response_headersでレスポンスヘッダの情報を見てテストが出来る ・response_headersはrack_testでは利用できるが、他のドライバ(headless chromeなど)ではresponse_headersが使…

ヘッドレスドライバを使わないとCIだけJavaScriptのテストが通らない(RSpec)

【結論】 ・JavaScriptの操作を伴うテストを実行する場合、ブラウザシュミレータ(ドライバ)を使う必要がある ・デフォルトのドライバではテスト実行中にブラウザのウィンドウが開くが、これはCircleCIなどの継続的インテグレーション環境では実行できない …

Capybaraでiframe内の要素を取得/操作する方法(Rails)

【結論】 ・iframeタグ配下の要素は、そのままでは直接操作することが出来ない ・iframe内の要素を取得/操作するにはwithin_frameで、iframeを明示的に呼び出す必要がある ・within_frameのブロック内であれば、通常のCapybaraの処理でiframe内の要素を取得/…

RSpecを用いたモデルの単体テスト方法

【結論】 ・プログラミングにおけるテストとは、 プログラミングが正常に動作するかを、 プログラミングで検証する手法・人の手ではなく、プログラミングが検証する メリットは下記の3つがあげられる ・検証する時間を短縮する ・仕様漏れを防ぐ ・リファク…