Một giải pháp là tạo một tập lệnh để hiển thị tất cả các mẫu dựa trên từ điển đầu vào của các giá trị thử nghiệm biến.
Logic chính để lấy danh sách các biến được định nghĩa trong các mẫu như sau:
from django.template.loader import get_template
def extract_required_vars(node):
if not hasattr(node, 'nodelist'):
return []
var_names = []
for child_node in node.nodelist:
if isinstance(child_node, VariableNode):
var_names.append(child_node.filter_expression.token)
elif isinstance(child_node, ForNode):
var_names.append(child_node.sequence.var.var)
elif isinstance(child_node, ExtendsNode):
template = get_template(child_node.parent_name.var)
var_names.extend(extract_required_vars(template))
elif isinstance(child_node, IncludeNode):
template = get_template(child_node.template.var)
var_names.extend(extract_required_vars(template))
var_names.extend(extract_required_vars(child_node))
return var_names
required_vars = extract_required_vars(get_template('index.html'))
Kịch bản sau đó kiểm tra rằng các biến được định nghĩa trong các mẫu hoặc là trong các thiết lập dự án hoặc trong dict cung cấp bởi người dùng làm đầu vào thử nghiệm.
/path/to/project/templates/templates/allusers.html
-> ok: users, STATIC_URL
/path/to/project/templates/entrer-en-contact.html
-> ok: contactform, STATIC_URL
/path/to/project/templates/dest-summary.html
-> ok: STATIC_URL
-> missing: dest_username
Chi tiết khác in this blog post.
Nguồn
2015-04-19 13:42:11
Cảm ơn :) Tôi sẽ xem xét. Tôi đã nhìn thấy các liên kết đoạn trước nhưng phần còn lại là mới với tôi (và tôi yêu các khái niệm thử nghiệm ngu ngốc theo định hướng: D). Vâng, tôi cho rằng "tất cả các tình huống có thể xảy ra" đang đòi hỏi quá nhiều - chỉ bằng cách sử dụng các trang phẳng có thể giới thiệu nhiều HTML không hợp lệ vào một trang web. Tuy nhiên, tôi vẫn tò mò liệu có bất kỳ giải pháp nào trong app.py_START kiểm tra app_name tĩnh mạch hay không và cách thực tiễn của điều đó so với cách tiếp cận middleware so sánh. Yêu câu trả lời của bạn mặc dù :) –
Chắc chắn, gấp nó vào quá trình thử nghiệm của bạn. Không chắc chắn nếu có ai làm công việc khó khăn, nhưng tôi đoán bạn cần một cách để đi qua các url của bạn.py' và tạo nhiều URL có thể cho trang web nhất có thể. Sau đó, bạn có thể sử dụng [trình kiểm tra Django được tích hợp sẵn] (http://docs.djangoproject.com/en/dev/topics/testing/#module-django.test.client) để tìm nạp tất cả các url đó, và [một cái gì đó để xác thực chúng] (http://stackoverflow.com/questions/35538/validate-xhtml-in-python). –
Cảm ơn, tôi nghĩ hai câu trả lời của bạn là tất cả những gì tôi cần :) Bây giờ, tôi có thể thử những gì tốt nhất cho tôi và trong hoàn cảnh nào :) –