assert_difference
がありますね。でもこれ差分を取るので数値を返す式にしか使えません。使おうとしたら + なんて演算子ないよってエラーが出ます。
仕方なしにこんなテストコードを書いてません?
test 'ユーザーが確認済みになること' do assert_not user.confirmed? # ここに承認処理 assert user.confirm? endそれならば、こんなメソッドを test_helper あたりに定義しておいて
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
def assert_change(expression, message = nil, &block) | |
exp = expression.respond_to?(:call) ? expression : ->{ eval(expression, block.binding) } | |
before = exp.call | |
yield | |
error = "#{expression.inspect} didn't change" | |
error = "#{message}.\n#{error}" if message | |
assert_not_equal before, exp.call, error | |
end | |
def assert_not_change(expression, message = nil, &block) | |
exp = expression.respond_to?(:call) ? expression : ->{ eval(expression, block.binding) } | |
before = exp.call | |
yield | |
error = "#{expression.inspect} changed" | |
error = "#{message}.\n#{error}" if message | |
assert_equal before, exp.call, error | |
end |
test 'ユーザーが確認済みになること' do assert_change 'user.confirmed?' do # ここに承認処理 end end # 実際の値を気にしなくていいならこんな使い方も test '保存したら updated_at が更新される' do assert_change 'user.updated_at' do user.save end endと書くとちょっとスッキリしますね。コードはほぼほぼ
assert_difference
のパクリです。expression
の指定方法は必要になったら広げる感じでいいかな。
0 件のコメント :
コメントを投稿