2017-08-31 7 views
1

アサーションのいくつかが同じであるいくつかの統合テストがあります。保守性の問題については、ユニークな機能の下で各テストの共通のアサーションを再編成したいと思います。例えば関数内に繰り返しアサーションをカプセル化する

test "login with invalid information" do 
    get login_path 
    assert_template 'sessions/new' 
    post login_path, params: { session: { email: "", password: "" } } 
    assert_template 'sessions/new' 
    assert_not flash.empty? 
    get root_path 
    assert flash.empty? 
    end 

    test "login with valid information followed by logout" do 
    get login_path 
    assert_template 'sessions/new' 
    post login_path, params: { session: { email: @user.email, password: "password" } } 
    . 

    end 

get login_path 
assert_template 'sessions/new' 

ビットは二つの試験の内側繰り返されます。これをより保守性の高いものにするにはどうすればよいですか?

答えて

0

「繰り返し」と記載されている部分は、各テストでアサートされるべきではありません。最初のテストがテンプレートのアサートで失敗した場合、同じアサーションを使用する他のテストも失敗します。これは、単一のテストにtest 'login rendered template'のようなものをそのテストロジックを抽出し、他のテストからそれらのget & assert_templateを削除する必要があります意味:

test "login rendered template" do 
    get login_path 
    assert_template 'sessions/new' 
end 

test "login with invalid information" do 
    # template assertion already done in previous test 
    post login_path, params: { session: { email: "", password: "" } } 
    # [...] 
end 

これはあなたのアプリケーションのテストに悪い習慣の一例です。単一のテストでは、特定のロジック/フィーチャについてアサーションを行い、繰り返しはしないでください。あなたのテストスイートで繰り返されるコード/アサーションの部分が見える場合、それはおそらく単一のテストに抽出されるべきです。

関連する問題