17

フラスコの設計図を単体テストする良い方法はありますか?

http://flask.pocoo.org/docs/testing/

私を助けてくれるもの、または十分に単純なものが見つかりませんでした。

//編集
これが私のコードです:

# -*- coding: utf-8 -*-
import sys
import os
import unittest
import flask

sys.path = [os.path.abspath('')] + sys.path

from app import create_app
from views import bp


class SimplepagesTestCase(unittest.TestCase):
    def setUp(self):
        self.app = create_app('development.py')
        self.test_client = self.app.test_client()

    def tearDown(self):
        pass

    def test_show(self):
        page = self.test_client.get('/')
        assert '404 Not Found' not in page.data


if __name__ == '__main__':
    unittest.main()

この場合、ブループリントをテストします。アプリ全体ではありません。設計図をテストするために、アプリのルート パスを に追加しましたsys.pathcreate_appこれで、アプリを作成する関数をインポートできます。も初期化しtest_clientます。

私は良い解決策を見つけたと思います。それとももっと良い方法がありますか?

4

3 に答える 3

13

ブループリントはアプリケーションとよく似ています。test_clientテストリクエストが必要だと思います。

アプリケーションの一部としてテスト ブループリントが必要な場合は、アプリケーションに違いはないように見えます。

拡張機能としてテスト ブループリントが必要な場合は、独自のブループリントを使用してテスト アプリケーションを作成し、テストすることができます。

于 2013-11-13T22:48:14.140 に答える
0

1 つのアプリに複数の API があるため、url_prefix. API をテストするときに、すべてのパスにプレフィックスを付ける必要があるのが気に入りませんでした。次のクラスを使用してtest_client、ブループリントをラップしました。

class BlueprintClient():
    def __init__(self, app_client, blueprint_url_prefix):
        self.app_client = app_client
        self.blueprint_url_prefix = blueprint_url_prefix.strip('/')

    def _delegate(self, method, path, *args, **kwargs):
        app_client_function = getattr(self.app_client, method)
        prefixed_path = '/%s/%s' % (self.blueprint_url_prefix, path.lstrip('/'))
        return app_client_function(prefixed_path, *args, **kwargs)

    def get(self, *args, **kwargs):
        return self._delegate('get', *args, **kwargs)

    def post(self, *args, **kwargs):
        return self._delegate('post', *args, **kwargs)

    def put(self, *args, **kwargs):
        return self._delegate('put', *args, **kwargs)

    def delete(self, *args, **kwargs):
        return self._delegate('delete', *args, **kwargs)

app_client = app.test_client()
api_client = BlueprintClient(app_client, '/api/v1')
api2_client = BlueprintClient(app_client, '/api/v2')
于 2019-09-11T08:30:26.410 に答える