AttributeError: объект «async_generator» не имеет атрибута «post». ⇐ Python

Программы на Python
Anonymous
AttributeError: объект «async_generator» не имеет атрибута «post».

Сообщение Anonymous »

Я пишу тесты pytest для своего асинхронного проекта FastAPI. Тесты вызывают ошибку:

Код: Выделить всё

test_main.py::test_create_user FAILED                                    [100%]
test_main.py:32 (test_create_user)
client = 
generate_random_phone_number = 
generate_random_phone_prefix = 

@pytest.mark.asyncio
async def test_create_user(client: AsyncClient, generate_random_phone_number, generate_random_phone_prefix):
user_data = {
"phone_number": generate_random_phone_number(),
"phone_prefix": generate_random_phone_prefix()
}

>        response = await client.post("/api/user/", json=user_data)
E       AttributeError: 'async_generator' object has no attribute 'post'

test_main.py:40: AttributeError
Вот код

Код: Выделить всё

import random
import string

import pytest
from httpx import AsyncClient

from main import app  # Make sure this import points to your FastAPI app instance

@pytest.fixture
async def client():
async with AsyncClient(app=app, base_url="http://test") as client:
yield client

@pytest.fixture
def generate_random_phone_number():
def _generate(length=10):
return ''.join(random.choices(string.digits, k=length))

return _generate

@pytest.fixture
def generate_random_phone_prefix():
def _generate():
prefix_length = random.randint(1, 3)
return '+' + ''.join(random.choices(string.digits, k=prefix_length))

return _generate

@pytest.mark.asyncio
async def test_create_user(client: AsyncClient, generate_random_phone_number, generate_random_phone_prefix):
user_data = {
"phone_number": generate_random_phone_number(),
"phone_prefix": generate_random_phone_prefix()
}

response = await client.post("/api/user/", json=user_data)

assert response.status_code == 201
data = response.json()
assert data["phone_number"] == user_data["phone_number"]
assert data["phone_prefix"] == user_data["phone_prefix"]

@pytest.mark.asyncio
async def test_duplicate_user(generate_random_phone_number, generate_random_phone_prefix):
phone_number = generate_random_phone_number()
phone_prefix = generate_random_phone_prefix()
user_data = {
"phone_number": phone_number,
"phone_prefix": phone_prefix
}

async with AsyncClient(app=app, base_url="http://test") as ac:
await ac.post("/api/user/", json=user_data)
response = await ac.post("/api/user/", json=user_data)

assert response.status_code == 400
data = response.json()
assert data["detail"] == "A user with the given phone number and prefix already exists."
изменение кода на

Код: Выделить всё

import random
import string

import pytest
from httpx import AsyncClient

from main import app  # Make sure this import points to your FastAPI app instance

@pytest.fixture
def generate_random_phone_number():
def _generate(length=10):
return ''.join(random.choices(string.digits, k=length))

return _generate

@pytest.fixture
def generate_random_phone_prefix():
def _generate():
prefix_length = random.randint(1, 3)
return '+' + ''.join(random.choices(string.digits, k=prefix_length))

return _generate

@pytest.mark.asyncio
async def test_create_user(generate_random_phone_number, generate_random_phone_prefix):
user_data = {
"phone_number": generate_random_phone_number(),
"phone_prefix": generate_random_phone_prefix()
}

async with AsyncClient(app=app, base_url="http://test") as ac:
response = await ac.post("/api/user/", json=user_data)

assert response.status_code == 201
data = response.json()
assert data["phone_number"] == user_data["phone_number"]
assert data["phone_prefix"] == user_data["phone_prefix"]

@pytest.mark.asyncio
async def test_duplicate_user(generate_random_phone_number, generate_random_phone_prefix):
phone_number = generate_random_phone_number()
phone_prefix = generate_random_phone_prefix()
user_data = {
"phone_number": phone_number,
"phone_prefix": phone_prefix
}

async with AsyncClient(app=app, base_url="http://test") as ac:
await ac.post("/api/user/", json=user_data)
response = await ac.post("/api/user/", json=user_data)

assert response.status_code == 400
data = response.json()
assert data["detail"] == "A user with the given phone number and prefix already exists."
работает отлично.
Что не так с первой частью кода?

Подробнее здесь: https://stackoverflow.com/questions/780 ... ibute-post

Вернуться в «Python»