System Specの場合
have_selector
CSSセレクタ内に特定の要素を含んでいるか検査します。
例
下記の例だと.navというクラスにタスクという文字列をテキストに含むものがあるかどうかチェックをします。
1 |
expect(page).to have_selector '.nav' text: 'タスク' |
have_content
ページ内に特定のコンテンツがあるかどうかチェックします。
have_no_content
ページ内に特定のコンテンツがないかどうかチェックします。
Model Specの場合
eq
rspec-expectationsが提供するマッチャでメソッドの結果が指定した値と等しいかチェックします。かなり使用頻度が高いマッチャになります。
例
1 |
expect(user.age).to eq 3 |
be_valid
rspec-railsが提供するマッチャでモデルが有効な状態であるかを判定する。
include
文字列が含まれるかチェックする。
be_empty
返却された配列かコレクションが空かどうかチェックする。
be_late
Rspecに定義されているマッチャではないですが、例えば下記のようにアプリケーションのモデル内に「late」または「late?」という名前のついた真偽値を返すメソッドがあればこのマッチャを使えば呼び出してテストコードの判定に使うことができます。
1 2 3 4 5 |
class モデルクラス名 < ApplicationRecord def late? 属性の比較処理 end end |
Controller Specの場合
ステータスチェック系
下記のようにHTTPステータスをチェックするマッチャは複数用意されています。どちらを使うかはHTTPクライアントに返すレスポンスの複雑さによって決めると良いでしょう。色々な種類があります。
respond_with(:success):shoulda-matchersのインストールが必要
実務ではこれを使っていることも多いです。
have_http_status "ステータスコード(例:302等)"
HTTPステータスコードが一致しているかテストします。
be_success
レスポンスステータスが成功(200)かそれ以外(500等)かをチェックします。
render_template
指定したテンプレートがレンダリングされているかテストできます。「rails-controller-testing」というGemをインストールすることで利用可能になります。
be_a_new
新しいオブジェクトが設定されているかチェックできます。
change
DBにデータ件数が1件増えていることをテストできます。
redirect_to "リダイレクトを期待するURL"
include
カスタムマッチャとは?
Rspecのマッチャは自作することが可能です。
作成方法
下記のディレクトリを作成します。
1 |
spec/support/matchers/カスタムマッチャ名.rb |
内容
1 |
RSpec::Matchers.define :呼び出す名前 マッチャの内容 |
aggregate_failuresとは?
一つのexpectが失敗した際に通常であれば次のitに移動してしまいますが、aggregate_failuresを使うことによって仮に失敗したとしても次のexpectを実行してくれるようになります。
記述方法
下記のように「aggregate_failures」という構文でくるむようにします。
1 2 3 4 5 6 7 8 |
# 正常にレスポンスを返すこと it "responds successfully" do get :index aggregate_failures do expect(response).to be_success ★ここで失敗する。 expect(response).to have_http_status "200" ★本来はこの行は実行されないが実行される。 end end |
注意点
aggregate_failuresは失敗するexpectに対してだけ働くものであり一般的なエラーには働かないので注意です。
この記事へのコメントはありません。