2016-07-14 6 views
2

..だからである:フラスコ - トラブル特定のエンドポイントの要求別のフラスコの質問に戻る再びサブドメイン

私のアプリケーションは、様々な部分の代わりに、プレフィックスのサブドメインの利用を中心に大幅に設定されています。そのように、私のアプリのための典型的なURLは次のようになります。

domain.tld/ 
domain.tld/about 
admin.domain.tld/ 
admin.domain.tld/login 
etc. 

私はユニットテストを構成していると私が問題に遭遇しているように見えるしました。 FlaskとWerkzeugのドキュメントをたくさん検索しましたが、私の問題を解決する方法を見つけることができません。

私がテストしているとき、私はGETのさまざまなURLへのリクエストをシミュレートしようとしています。これらのURLの多くはサブドメインに分類されます。私は論理的であるように見えるでしょう次のことを試してみた:

with app.app_context(): 
    url = url_for("admin.login") # returns http://admin.domain.tld:80/login 
    with app.test_client() as c: 
     resp = c.get(url) # Fails: returns 404 
     assert resp.data == "Expected test response", "Bad Response" 

今..私の c.getのURLで予想されるデータを含む応答を返す必要がありますが、代わりに私はデフォルトの404ハンドラを与えられています。これにより、私のルートの多くをテストすることが非常に難しくなります。

私はFlaskにいくつかの読書をして、a github issueがテストクライアントが相対URLを期待していることを発見しました...うーん。私はサブドメインを指定する必要があるので、それをどのように提供するのかは分かりません。

さらに、読んだところで、FlaskテストクライアントはWerkzeugテストクライアント上に構築されており、Werkzeugテストクライアントには通常allow_subdomain_redirectsというオプションが含まれていることが判明しました。残念ながら、Flaskテストクライアントがこれまでの動作を行うように設定しようとすると失敗しました(私は間違っているかもしれません)。

とにかく、私のフラスコアプリでリクエストをシミュレートしてサブドメインをターゲットにする方法を知っている人はいますか?現時点では、私はすべてのアイデアがありません。ご意見ありがとうございます。 :)

答えて

2

だから私は問題を発見した...そして、結局のところフラスコの問題のように思える。何app.config["SERVER_NAME"]に応じて...しかし、注意すべき点があり

with app.test_client() as c: 
    c.get("/target/path.html", base_url="admin.domain.tld/") 

設定されている。適切にサブドメインを要求する方法についてのガイダンスを与えるように見えた

まず、検索のLOTS後、私はthis archive hereを見つけ が

この が機能しない可能性があります...具体的には、 app.config["SERVER_NAME"]が80の明示的なポートを持つ場合、0.11.1のフラスコのように上記 c.getです。FAILです。 (すなわち、 SERVER_NAMEdomain.tld:80のように見える場合)しかし、 SERVER_NAMEに他のポートが含まれていると、正しく機能します。 (すなわち domain.tld:5000すべてが正常に動作しますよう SERVER_NAMEが見える場合)

これが意図されているかどうか、私は知りません..しかし、それは私に頭痛と多くの作業が発生している..私はgithubの問題を掲載する予定ですそれはまもなくそれが本当に意図されていることを確認するためです。

+0

[Github Issue] [Gist demonstration issue](https://gist.github.com/CorneliaXaos/9e4fa46f442f72fc5bff07ffedace397) –

関連する問題