Pytest фиксирует методы импорта из TestCase, а не из того, что импортировано в conftest.py - PullRequest
0 голосов
/ 22 октября 2019

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 в определении самого прибора?

...