2017-08-31 52 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 

這是在測試你的應用程序一個不好的做法的一個例子。單個測試應該對特定的邏輯/特徵作出斷言,而不是重複。如果您在測試套件中看到重複的代碼/斷言片斷,則應該將其提取爲單個測試。