Minitestのassert_differenceメソッド
まずassert_differenceメソッドはMinitestそのもののメソッドではなく、Railsがminitestフレームワークを拡張するという形で独自のカスタムアサーションを追加しています。他にはassert_changesやassert_response、assert_redirected_toといったメソッドもRailsが提供するカスタムアサーションになります。assert_differenceの具体的な使用例としては以下のようになります。
assert_difference 'User.count', -1 do
delete user_path(@non_admin)
end
assert_differenceメソッドの第1引数に渡したメソッドの値が、ブロック内で変更されることを検証します。第2引数に変更される期待値を渡します。省略した場合は"+1"が期待値になります。つまりassert_differenceとはブロック内の処理をして指定した数字の分だけ変化したことを確認するメソッドになります。テストの用途としてはユーザーなどの数をテストしたり、画面遷移をした後のリンクの数を確認したり出来ます。
assert_no_differenceについて
ちなみにassert_differenceに似たメソッドとしてassert_no_differenceというメソッドも存在します。式を評価した結果の数値は、ブロックで渡されたものを呼び出す前と呼び出した後で違いがないと主張する。使い方もassert_differenceと同じで以下のようになります。
assert_no_difference 'User.count' do
delete user_path(@user)
end