Код: Выделить всё
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