2009-12-14 39 views
5

Tôi có phương thức mở rộng HTMLHelper để xuất HTML thành Response.Write. Làm thế nào tốt nhất để kiểm tra đơn vị này?Kiểm tra đơn vị Phương pháp mở rộng trên HtmlHelper

Tôi đang xem xét chế nhạo HtmlHelper được chuyển vào phương thức nhưng không chắc chắn cách tôi nên xác minh HTML được gửi đến Response.Write.

Cảm ơn

Trả lời

5

Nếu bạn đang sử dụng một helper HTML để văn bản đầu ra cho trình duyệt tại sao không có nó trả về một chuỗi và theo quan điểm của bạn làm điều gì đó giống như ...

<%=Html.YourExtension() %> 

Nó làm cho nó một rất nhiều thử nghiệm hơn.

Kindness,

Dan

EDIT:

Modification sẽ là một sự thay đổi của chữ ký

public static void YourExtension(this HtmlHelper html) 
{ 
    ... 
    Response.Write(outputSting); 
} 

để

public static string YourExtension(this HtmlHelper html) 
{ 
    ... 
    return outputSting; 
} 
+0

ngồi biên tập với việc sửa đổi đề nghị –

0

này hoạt động nếu t ông phương pháp "YourExtension" chỉ đơn giản là sử dụng phương pháp HtmlHelper trả về chuỗi hoặc HtmlString. Nhưng các phương thức như "BeginForm" trả về đối tượng MvcForm và cả thẻ biểu mẫu được viết trực tiếp trên TextWriter mà HtmlHelper có tham chiếu đến.

1

Tôi sử dụng mã sau để kiểm tra và xác thực người trợ giúp html. Nếu bạn đang làm bất cứ điều gì phức tạp, như người giúp việc dựa trên dùng một lần như beginform hoặc người trợ giúp với các phụ thuộc bạn cần một khuôn khổ kiểm tra tốt hơn sau đó chỉ cần nhìn vào chuỗi của một người trợ giúp duy nhất.

Xác thực là một ví dụ khác.

Hãy thử như sau:

 var sb = new StringBuilder(); 
     var context = new ViewContext(); 
     context.ViewData = new ViewDataDictionary(_testModel); 
     context.Writer = new StringWriter(sb); 
     var page = new ViewPage<TestModel>(); 
     var helper = new HtmlHelper<TestModel>(context, page); 

     //Do your stuff here to exercise your helper 


     //Get the results of all helpers 
     var result = sb.ToString(); 

     //Asserts and string tests here for emitted HTML 
     Assert.IsNotNullOrEmpty(result); 
Các vấn đề liên quan