2011-01-29 35 views
9

Tôi đang thử công cụ Xem dao cạo MVC3 và một trong các tính năng mà tôi khám phá là khả năng kiểm tra đơn vị.Kiểm tra đơn vị MVC3 Trình trợ giúp dao cạo/lượt xem không có dây

Tôi đã thấy một số ví dụ trong đó chế độ xem Dao cạo có thể được biên dịch thành một hội đồng và được hiển thị thành chuỗi. Vấn đề là nó ám chỉ như một chuỗi, vì vậy tôi còn lại với việc tìm kiếm chuỗi!

Đây là những gì tôi đang cố gắng làm.

  1. Tạo một helper Razor
  2. Compile helper
  3. Run biên soạn helper, đi qua trong một ViewModel
  4. Lấy đầu ra của helper như một số loại cấu trúc/XML/cây HTML

Lý do tôi muốn làm điều này là để tôi có thể kiểm tra các phần cụ thể của đầu ra. Người trợ giúp có khả năng sẽ nhổ ra HTML bao gồm nhiều đầu ra khác nhau. Những gì tôi muốn làm là để xem nếu có một hộp kiểm với một giá trị cụ thể (ví dụ). Nếu bạn đã thấy các bài kiểm tra Selenium, nó tương tự như những gì tôi muốn làm, ngoại trừ không phải là kiểm tra hướng máy chủ.

Có cách nào để có được chế độ xem Razor (hoặc chế độ xem khác) được biên dịch để phát ra một thứ gì đó khác với chuỗi không?

Trả lời

4

Câu trả lời ngắn gọn là không, vì mục đích của công cụ xem trong cuộc sống là để nhổ ra chuỗi. Phân tích cú pháp các chuỗi đó thành một tài liệu XML là một cách để cung cấp cho chúng một cấu trúc nhỏ, như @ Craig-M đề xuất. Nhưng những gì bạn phải tự hỏi chính mình là những gì bạn đang thực sự thử nghiệm. Nếu chế độ xem của bạn biên dịch và tạo ra một số loại HTML, có thể có ba vấn đề với loại HTML được tạo:

  • dữ liệu hiển thị không chính xác. Bạn sẽ kiểm tra điều này ở cấp độ bộ điều khiển, vì vậy bạn có thể bỏ qua nó trong khi kiểm tra xem.
  • khuôn khổ MVC có lỗi và tạo ra chuỗi HTML sai. Bạn không phải lo lắng về điều này, bởi vì MVC có bộ thử nghiệm riêng của mình và nhờ sự tách biệt các mối quan tâm, nó không phải là vấn đề của bạn.
  • HTML đã phá vỡ giao diện người dùng.

Điều cuối cùng sẽ rất hay để thử nghiệm, nhưng tại sao không thử nghiệm trong thử nghiệm đơn vị javascript? Kiểm tra các bộ thử nghiệm đơn vị javascript phổ biến như JsUnit, FireUnit, QUnit, v.v. Họ sẽ làm tốt hơn nhiều so với việc bạn có thể phân tích đầu ra Razor.

Tôi nghĩ rằng giá trị được gán cho hộp kiểm có thể sẽ được kiểm tra trong Kiểm tra bộ điều khiển. Nhưng để sử dụng ví dụ của bạn, kiểm tra giá trị của hộp kiểm của bạn có thể là $ ('# theCheck'). Val() == 'giá trị'. Và bạn có thể chạy các trang web này với một trang web đang chạy với kho lưu trữ hoặc dịch vụ phụ thuộc được tiêm để kiểm soát những thứ như 'giá trị'.

Chỉ là một ý nghĩ.

+0

Cảm ơn câu trả lời tuyệt vời. Lý do để kiểm tra ở cấp HTML là kiểm tra logic trong chế độ xem. Ví dụ, nếu tôi vượt qua trong một ViewModel có chứa sản phẩm, và có một tài sản trong kho. Nếu một sản phẩm có cổ phiếu == 0, không hiển thị liên kết mua hàng. Sau đó, tôi thêm logic trong ViewModel để đảm bảo rằng các sản phẩm không bao giờ có cổ phiếu == 0, nhưng thay vì sử dụng IsInStock? bất động sản. Tôi muốn một thử nghiệm sẽ thất bại do nó không sản xuất đúng HTML. Một cách để viết bài kiểm tra này là xây dựng một ViewModel hợp lệ, chuyển nó tới khung nhìn và kiểm tra xem liên kết đó có được tạo ra hay không. Có lý? Cảm ơn, –

+0

Vâng, tôi theo dõi. Kiểm tra xem liên kết tồn tại trong QUnit có phải đơn giản như: kiểm tra ("kiểm tra liên kết", hàm() { ok ($ ('# myLink'). Length == 1, "link present"); }); – Milimetric

1

Một cách bạn có thể thực hiện việc này là phân tích cú pháp chuỗi html thành XDocument và yêu cầu lắp ráp lại. Sau đó, bạn có thể truy vấn nó với LINQ trong các bài kiểm tra của bạn.

Chỉnh sửa: Tôi đang cố gắng tìm ra chiến lược thử nghiệm Razor. Tôi muốn được quan tâm để biết làm thế nào bạn có được người trợ giúp để làm việc. Cho đến nay, tôi đang vẽ một khoảng trống trong việc đưa chúng vào các chuỗi bên ngoài khung MVC.

+0

Đó là hướng tôi đang đi ngay bây giờ. Ngay cả với Razor, nó là loại một rắc rối để quay lên có được tất cả các phụ thuộc làm việc đúng (ví dụ, TempData) để thử nghiệm một cái nhìn. Tôi có thể nhìn vào View Engines khác, nhưng tôi nghĩ rằng đó là ASP.NET MVC đó là vấn đề. Hãy cho tôi biết nếu bạn thực hiện bất kỳ tiến bộ nào! Cảm ơn –

+0

Tôi đã dành hai ngày thử các phương pháp khác nhau để có được lượt xem được hiển thị cho một chuỗi. Không may mắn cho đến nay. Mỗi đường đi lên chống lại một số loại kháng chiến như là cần phải khởi tạo một lớp nội bộ hoặc không thể sử dụng những người trợ giúp MVC. Vì chúng tôi đã thực hiện thử nghiệm WebAii trong dự án này, tôi đã hết thời gian để làm việc đó và phải từ bỏ nỗ lực của tôi. Tôi rất thích làm điều này trên các dự án của riêng tôi mặc dù và chắc chắn sẽ đăng trở lại đây nếu/khi tôi đưa ra một giải pháp. –

+0

Một chút trễ, nhưng tôi đã đăng các bộ phận để có được bộ phận kiểm tra đơn vị hoạt động cho chế độ xem Dao cạo trong câu hỏi sau: http://stackoverflow.com/questions/8720222/how-do-i-test-views-using-razor- cú pháp-in-mvc3 – Lucero

1

Cách hiển thị lượt xem của bạn thành html và sau đó gửi html đó đến thư viện HtmlAgility? Bằng cách đó bạn có thể dễ dàng duyệt qua/điều hướng html của bạn. Tôi không nghĩ có cách nào để làm điều đó với MVC.

+0

Đây là hướng mà tôi đã kết thúc. Với sự gia tăng của HTML5, có vẻ như mong đợi XML thực sự sẽ trở thành vấn đề sau này. –