2012-08-09 38 views
0

你可以使用一個常規的RequiredValidator來表示一個文本框,但不能用於標籤,所以我添加了一個自定義驗證器並使用JQuery函數來驗證它。所有工作正常,但我想能夠單元測試它。如何在自定義驗證程序中使用QUnit測試標籤?

我需要什麼樣的變化做,來測試這個功能:

function LabelRequired_Validate(sender, args) { 
    if (sender == $("#ctl00_cphMain_Agent2_Agent_Agent_LabelValidator1")[0]) { 
     if ($("#ctl00_cphMain_Agent2_Agent_Agent_ValueLabel")[0].innerText.length > 0) { 
      args.IsValid = true; 
     } else { 
      args.IsValid = false; 
     } 
    } else { 
     args.IsValid = true; 
    } 
} 

與此QUnit測試(或類似):

test("Servicing_Topup_Branch_label_is_valid", function() { 
    var span = $("span[id$=ValueLabel]"); 
    $(span).text(10 + " characters long"); 

    var args = { IsValid: true, Value: "" }; 
    LabelRequired_Validate($(span), args) 

    ok(args.IsValid == true, "Validation Passed!"); 
}); 

這裏是我的自定義的驗證:

<asp:CustomValidator ID="LabelValidator1" runat="server" ErrorMessage="<%$Resources:Main,RequiredFieldWarning %>" 
     Display="Dynamic" ClientValidationFunction="LabelRequired_Validate" EnableViewState="False" 
     class="alertMsg"> 
    </asp:CustomValidator> 

回答

0

對目標和測試功能進行了一些更改。這是它的工作原理。

要目標:

function LabelRequired_Validate(sender, args) { 
    if (sender == $("span[id$=LabelValidator1]")[0]) { 
     if ($("span[id$=ValueLabel]")[0].innerText.length > 0) { 
      args.IsValid = true; 
     } else { 
      args.IsValid = false; 
     } 
    } else { 
     args.IsValid = true; 
    } 
} 

而到了測試:

test("Servicing_Topup_Branch_label_required_is_valid", function() { 
    expect(2); 

    var span1 = $("span[id$=LabelValidator1]"); 
    var span2 = $("span[id$=ValueLabel]"); 

    $(span2).text(18 + " characters long"); 
    var args = { IsValid: true, Value: "" }; 
    LabelRequired_Validate(span1[0], args) 

    ok(args.IsValid == true, "Not empty label returns Valid - Passed!"); 


    $(span2).text(""); 
    args = { IsValid: true, Value: "" }; 
    LabelRequired_Validate(span1[0], args) 

    ok(args.IsValid == false, "Empty label returns NotValid - Passed!"); 

}); 
相關問題