flask_testing.TestCase
имеет свой собственный метод create_app
.
Мы определяем метод create_app
в папке __init__.py
над папкой, над которой расположены наши тесты.
Я пишу приспособление pytest, которое вызывает наш метод create_app
:
conftest.py
import pytest
from above_folder import create_app
@pytest.fixture(scope='session', autouse=True)
def app():
app = create_app()
return app
test_something. py
from flask_testing import TestCase
@pytest.mark.usefixtures('app')
class TestSomething(TestCase):
def test_something(self):
assert True
Это приводит к следующей ошибке:
============================================================== FAILURES ==============================================================
_____________________________________________________ TestSomething.test_something _____________________________________________________
self = <above_folder.tests.test_something.TestSomething testMethod=test_something>, result = <TestCaseFunction 'test_something'>
def __call__(self, result=None):
"""
Does the required setup, doing it here
means you don't have to call super.setUp
in subclasses.
"""
try:
> self._pre_setup()
/usr/local/lib/python3.6/site-packages/flask_testing/utils.py:131:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/usr/local/lib/python3.6/site-packages/flask_testing/utils.py:137: in _pre_setup
self.app = self.create_app()
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <above_folder.tests.test_something.TestSomething testMethod=test_something>
def create_app(self):
"""
Create your Flask app here, with any
configuration you need.
"""
> raise NotImplementedError
E NotImplementedError
/usr/local/lib/python3.6/site-packages/flask_testing/utils.py:122: NotImplementedError
====================================================== 1 failed in 1.50 seconds =====================================================
Это ошибка, которую вы получаете, когда делаете что-то вроде:
from flask_testing import TestCase
t = TestCase()
t.create_app()
. .. указывает на то, что прибор использует метод flask_testing.TestCase
вместо того, который мы импортировали в conftest.py .
Теперь, если мы сделаем что-то вроде этого:
other_file.py
from flask_testing import TestCase
from above_folder import create_app
class OtherTestCase(TestCase):
def create_app(self):
return create_app()
И измените тестовый класс TestSomething
таким образом, чтобы его базовый класс был OtherTestCase
, тогда все будет работать как надо. Я также попытался наложить псевдоним create_app
в приборе, но получил ту же ошибку.
Почему прибор использует метод create_app
класса, к которому он прикреплен, а не метод create_app
в определении самого прибора?