Django と Python の組み込みのテスト機能はまだ使用していませんが、ようやく始めたいと思っています...そして、開発プロセス全体でチェックしておきたい最も明白なことの 1 つは、すべてのページが検証されることです。考えられるすべてのシナリオで。
これを行う最善の方法は何ですか?
Django と Python の組み込みのテスト機能はまだ使用していませんが、ようやく始めたいと思っています...そして、開発プロセス全体でチェックしておきたい最も明白なことの 1 つは、すべてのページが検証されることです。考えられるすべてのシナリオで。
これを行う最善の方法は何ですか?
良い質問。私はこれを自分で行っていないので、より良い答えが得られることを願っていますが、HTML 検証ミドルウェアを調べることをお勧めします。
アプリによっては、「考えられるすべてのシナリオで」というのは多すぎるかもしれません。たとえば、次の Facebook を作成し、毎日膨大な量のユーザー データを受け入れている場合、ある時点で、サイトのページの有効性を損なう何かが発生します。
検証エラーによって機能が破壊されることはあまりないため、限られたテスト データでチェックし、エラーが発生した場合に対応することは、受け入れられるアプローチかもしれません。これは愚かさ主導のテストとして知られていると思います。
または、通常の単体テスト プロセス中にサイトのページを検証する独自のアプローチは、次のようになります。
urls.py
を調べて、サイトの可能な限り多くの URL を生成します誰かがこれに関する作業を行ったかどうかはわかりませんが、これは再利用可能な方法です。
1 つの解決策は、変数テスト値の入力辞書に基づいてすべてのテンプレートをレンダリングするスクリプトを作成することです。
テンプレートで定義された変数のリストを取得する主なロジックは次のとおりです。
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'))
次に、スクリプトは、テンプレートで定義された変数がプロジェクト設定またはテスト入力としてユーザーによって提供された辞書にあることを確認します。
/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
詳細については、このブログ投稿を参照してください。
Django Check HTML ミドルウェアは、HTML のタイプミスを検出できます。