【问题标题】:Why is my conftest fixture is not applying to all FastAPI tests?为什么我的 conftest 夹具不适用于所有 FastAPI 测试?
【发布时间】:2022-01-04 20:15:30
【问题描述】:

conftest.py

import pytest
from ...main import app as starter
from fastapi.testclient import TestClient


@pytest.fixture(autouse=True, scope="module")
def client():
    client = TestClient(starter)
    return client

test_main.py

import pytest


@pytest.mark.unit
def test_root(client):
    response = client.get("/")
    assert response.json() == {"message": "Hello Bigger Applications!"}

test_router.py

import pytest


@pytest.mark.unit
class TestHelloRouter:
    def test_hello(client):
        response = client.get("/hello")
        assert response.json() == {"message": "Hello Router!"}


@pytest.mark.unit
class TestUserRouter:
    def test_read_users(client):
        response = client.get("/users/")
        assert response.json() == [{"username": "Rick"}, {"username": "Morty"}]

    def test_read_user_me(client):
        response = client.get("/users/me")
        assert response.json() == {"username": "fakecurrentuser"}

    def test_read_user(client):
        username = "unit-test"
        response = client.get(f"/users/{username}")
        assert response.json() == {"username": username}

为什么我在 test_router.py 文件中的所有测试都收到此错误? client的fixture范围应该是session,autouse应该设置为true吗?

E       AttributeError: 'TestUserRouter' object has no attribute 'get'
E       AttributeError: 'TestHelloRouter' object has no attribute 'get'

【问题讨论】:

    标签: python unit-testing testing pytest fixtures


    【解决方案1】:

    由于这些是类,因此在我看来,您只是缺少 self 作为被测函数的第一个参数。

    mport pytest
    
    
    @pytest.mark.unit
    class TestHelloRouter:
        def test_hello(self, client):
            response = client.get("/hello")
            assert response.json() == {"message": "Hello Router!"}
    
    
    @pytest.mark.unit
    class TestUserRouter:
        def test_read_users(self, client):
            response = client.get("/users/")
            assert response.json() == [{"username": "Rick"}, {"username": "Morty"}]
    
        def test_read_user_me(self, client):
            response = client.get("/users/me")
            assert response.json() == {"username": "fakecurrentuser"}
    
        def test_read_user(self, client):
            username = "unit-test"
            response = client.get(f"/users/{username}")
            assert response.json() == {"username": username}
    

    【讨论】:

    • 谢谢你救了我的脑袋
    猜你喜欢
    • 1970-01-01
    • 2012-09-24
    • 1970-01-01
    • 1970-01-01
    • 2022-09-30
    • 2021-04-17
    • 2020-06-06
    • 1970-01-01
    • 2015-06-24
    相关资源
    最近更新 更多