2011-04-11 5 views
5

Tôi mới dùng thử và tôi đang cố gắng tạo thử nghiệm cho sản phẩm Plone lần đầu tiên. Tôi đang ở trên Plone 3.3.Cách truy cập các chế độ xem được xác định với trình duyệt cụ thể [plone.] Trong các trường hợp thử nghiệm

Bộ thử nghiệm cơ bản hoạt động, tôi có thể thực thi nó mà không gặp lỗi. Tôi đã làm theo tài liệu này: http://plone.org/documentation/kb/testing ... ngoại trừ việc tôi đang viết bài kiểm tra của mình trong các lớp Python thay vì doctests.

Vấn đề của tôi là tôi dường như không thể truy cập các chế độ xem được xác định trong ứng dụng của mình (tôi nhận được ComponentLookupError).

Sự cố có vẻ như với "trình duyệt" được xác định bởi các ứng dụng của tôi. Khi tôi xóa thuộc tính layer = "..." khỏi tệp configure.zcml của mình, thử nghiệm có thể truy cập các chế độ xem mà không gặp sự cố. Tuy nhiên, nếu tôi thêm nó trở lại, nó không hoạt động. Tôi đoán đó là vì giao diện de browserlayer không được áp dụng cho yêu cầu.

Tham chiếu chỉ cho vấn đề này tôi thấy là trong các bài kiểm tra cho googlesitemap: http://dev.plone.org/collective/browser/googlesitemap/googlesitemap.common/trunk/googlesitemap/common/tests?rev=

Tác giả dường như đã tạo ra một tập tin ZCML tùy chỉnh cho các kiểm tra, trong đó lớp = "..." thuộc tính có đã bị loại bỏ. (Mà sẽ làm việc nhưng có vẻ như rất xấu cần phải duy trì một tập tin zcml riêng cho các bài kiểm tra)

Trong thử nghiệm của tôi, tôi đã bao gồm như sau (lấy từ các bài kiểm tra googlesitemap), mà đi:

from jambette.site.interfaces import IJambetteLayer # this is my browserlayer 
from plone.browserlayer.utils import registered_layers 
self.assertTrue(IJambetteLayer in registered_layers()) 

Vì vậy, tôi nghĩ rằng skin và trình duyệt của tôi được đăng ký chính xác.

Có bất kỳ điều gì tôi cần làm để trình duyệt sẽ được áp dụng cho yêu cầu không?

Trả lời

7

Giao diện lớp trình duyệt chỉ đơn giản là 'sơn' theo yêu cầu với directlyProvides. Chỉ cần làm như vậy trong thiết lập thử nghiệm của bạn trước khi bạn tra cứu chế độ xem:

from zope import interface 
from jambette.site.interfaces import IJambetteLayer 

... 

    directlyProvides(request, IJambetteLayer) 
+0

Cảm ơn bạn! Điều đó hoạt động hoàn hảo. :) – jphoude

+1

Nhân tiện, trong trường hợp đó là hữu ích cho bất cứ ai, tôi đã nhận được yêu cầu từ self.portal.REQUEST trong trường hợp thử nghiệm của tôi. – jphoude