いくつかのルートの単体テストを作成しようとしています。データ操作は非常に集中的で、サーバーの CPU を拘束し、新しいデータの取得はかなりまれです。@cache.memoize
そのため、より集約的なルートにはフラスコ キャッシュを使用しました。
このことから、テストケースを作成したいことが 2 つあります。
- ルートはキャッシングです。これがないと、データの操作に時間がかかりすぎます。
- キャッシュを明示的にクリアすると、データは静的データからリロードされます。これがないと、私のデータは古くなります。新しいデータを取得するたびにキャッシュをクリアします。
以下は、いくつかのコメントを含む私の単体テストのコードです。
import unittest
from app import create_app
from app.charts.cache import cache
class ChartTests(unittest.TestCase):
def setUp(self):
self.app = create_app('TESTING')
self.context = self.app.app_context()
self.client = self.app.test_client()
self.context.push()
def tearDown(self):
self.context.pop()
def test_routes_cached(self):
""" test that the routes are caching and uncaching correctly """
r1 = self.client.get('/chart/upgrade/')
r2 = self.client.get('/chart/upgrade/')
r3 = self.client.get('/chart/upgrade/?start_date=201404')
self.assertTrue( #R1 is not cached )
self.assertTrue( #R2 is cached )
self.assertFalse(r3.data == r2.data)
update_data(app) # changes the csv. Also uses flask-cache's `clear_cache()` to purge
r_new = self.client.get('/chart/upgrade')
self.assertTrue( #R_NEW is not cached )
self.assertTrue(r_new.data != r1.data)
私のルートはかなり単純で、次のパターンに従う傾向があります。
@charts.before_request():
def update_data():
charts.data = CSVReader('my_csv')
@charts.route('/upgrade')
@cache.memoize()
def upgrade():
# ... do little fiddles with some data
return jsonify(my_new_data)
単体テスト内のルートのキャッシュされたステータスについて正確なアサーションを行うにはどうすればよいですか?