2017-03-15 14 views
0

私はMichael Hartlのレッスンチュートリアルを見ています。6.2.2 UserTestには、 'name should be present'というテストが含まれています。テストコードを'assert_not user.valid?' vs. 'assert user.invalid?'

test 'email should be present' do 
    @user.email = " "  
    assert_not user.valid? 
end 

を含み、テストが失敗した場合、次のように出力される:私は

test 'email should be present' do 
    @user.email = " " 
    assert user.invalid? 
end 

にアサートを変更した場合は失敗テスト出力が

ある

FAIL["test_name_should_be_present", UserTest, 0.10366088798036799] 
test_name_should_be_present#UserTest (0.10s) 
     Expected true to be nil or false 

FAIL["test_name_should_be_present", UserTest, 0.11991263600066304] 
test_name_should_be_present#UserTest (0.12s) 
     Expected false to be truthy. 

Are 1つのテストが失敗し、もう1つが失敗する状況、またはこれらが交換可能な状況がありますか? 'assert .invalid?'私にはもっと自然なようです。

いいえ、電子メールの存在を検証するコードが書き込まれる前にテストが記述されているため、テストは失敗します。

+0

あなたのテストから完全なコードを表示しますか? –

+0

また、 'refute user.valid? 'もありますが、私はこの1つについてたくさんの気持ちを持っています:) –

答えて

0

はい、同等です。

.valid?と無効ですか? assert_notはnilまたはfalseを期待し、assertは非nilオブジェクトまたはtrueを期待します。

は、あなたができる、@userが無効であると仮定します。

assert_not @user.valid? 
#valid will give you false, so 'assert_not false' is true, and the test passes. 

一方:

assert @user.invalid? 
#invalid will give you true, so 'assert true' is true, and the test passes. 

我々は仮説と@userが有効で変更する場合は、同じ推論を行うことができます。

+0

これは私の前提でした。ありがとう。 – froglegs

+0

正しいのかどうかを確認することを忘れないでください:) – Gaston

関連する問題