Использование светильников pytest в классе - PullRequest
0 голосов
/ 23 января 2020

Я начал писать модульные тесты для моего Flask API. Я заставил их работать, когда объявил вне класса. Однако для простоты и ограничений OOP я пытаюсь заставить все работать из класса. Проблема в том, что я не могу передать какие-либо методы фикстуры в мой тестовый класс. У меня есть следующий код:

#conftest.py

import os, json, pytest
from ..app import create_app
from flask import Flask

@pytest.fixture
def env_setup():
    env_name = os.getenv('FLASK_ENV')
    app = create_app(env_name)
    return app

Я пытаюсь импортировать env_setup в следующий файл.

# test_BaseURL.py
import pytest

@pytest.mark.usefixtures("env_setup")
class TestStaticPages:

    def setUp(self, env_setup):
        """
        Setup Test
        """
        self.client = env_setup.test_client()

    def test_base_route(self, env_setup):
        #client = env_setup.test_client()
        url   = '/'
        html1 = b'Welcome to the API. Please visit '
        html2 = b'https://example.com to learn more about this app.'

        response = self.client.get(url)
        assert response.get_data() == html1 + html2
        assert response.status_code == 200

Я продолжаю получать следующую ошибку при запуске этого теста:

>       response = self.client.get(url)
E       AttributeError: 'TestStaticPages' object has no attribute 'client'

src/tests/test_BaseURL.py:18: AttributeError

Однако, если мне нужно раскомментировать строку с client = env_setup.test_client(), она работает. По какой-то причине он не может получить настройку из метода setUP и продолжает выдавать ошибки.

1 Ответ

1 голос
/ 24 января 2020

Вот как я исправил свою проблему:

#conftest.py
import os, json, pytest
from ..app import create_app
from flask import Flask

@pytest.fixture
def client():
    env_name = os.getenv('FLASK_ENV')
    app = create_app(env_name)
    client = app.test_client()
    return client

Затем я смог импортировать клиента в другой мой тестовый класс следующим образом.

#test_StaticView.py
import pytest

@pytest.mark.usefixtures("client")
class TestStaticPages:

    def test_base_route(self, client):
        url   = '/'
        html1 = b'Welcome to the API. Please visit '
        html2 = b'https://example.com to learn more about this app.'

        response = client.get(url)
        assert response.get_data() == html1 + html2
        assert response.status_code == 200
...