Я кодирую приложение FASTAPI с асинхронными функциями. My issue is, I can't mock properly async function with the mocker.patch from pytest-mock nor with AsyncMock from unittest.
The issue is, I can't test this function in the file test/unit/services/auth_test.py:
from typing import Optional
from src.Exceptions.jwt_token_exceptions import (
CREDENTIALS_EXCEPTION,
)
from src.models import User
from src.security.password import verify_password
from src.services.crud_user import get_user_by_login_with_validity_check
from src.utils.db import SessionDep
async def authenticate_user(
session: SessionDep,
username: str,
password: str,
) -> Optional[User]:
user = await get_user_by_login_with_validity_check(session, username)
if not user:
raise CREDENTIALS_EXCEPTION
is_correct_password = await verify_password(password, user.hashed_password)
if is_correct_password is not True:
raise CREDENTIALS_EXCEPTION
user.set_last_login_date()
await session.commit()
return user
< /code>
Так что мне нужно издеваться над этими функциями (сеанс уже высмеивается): < /p>
[list]
[*] get_user_by_login_with_validity_check
Похоже, что мой патч не существует ... потому что он входит в функцию вместо использования Mock
Я ожидаю правильно использовать макет и просто работать как ожидалось:/
Я кодирую приложение FASTAPI с асинхронными функциями. My issue is, I can't mock properly async function with the mocker.patch from pytest-mock nor with AsyncMock from unittest.
The issue is, I can't test this function in the file test/unit/services/auth_test.py: [code]from typing import Optional from src.Exceptions.jwt_token_exceptions import ( CREDENTIALS_EXCEPTION, ) from src.models import User from src.security.password import verify_password from src.services.crud_user import get_user_by_login_with_validity_check from src.utils.db import SessionDep
async def authenticate_user( session: SessionDep, username: str, password: str, ) -> Optional[User]: user = await get_user_by_login_with_validity_check(session, username) if not user: raise CREDENTIALS_EXCEPTION is_correct_password = await verify_password(password, user.hashed_password) if is_correct_password is not True: raise CREDENTIALS_EXCEPTION user.set_last_login_date() await session.commit() return user < /code> Так что мне нужно издеваться над этими функциями (сеанс уже высмеивается): < /p> [list] [*] get_user_by_login_with_validity_check[/code]
[*] [code]verify_password[/code]
[/list] Попытка теста: [code]from typing import Optional
import pytest from unittest.mock import AsyncMock from src.models import User from src.services.auth import authenticate_user
async def get_user_by_login_with_validity_check( session: SessionDep, login: str ) -> Optional[User]: user: User = await get_user_by_login(session, login) if user is None: raise USER_DOESNT_EXISTS > if user.deleted: ^^^^^^^^^^^^ E AttributeError: 'coroutine' object has no attribute 'deleted'
src\services\crud_user.py:57: AttributeError sys:1: RuntimeWarning: coroutine 'AsyncMockMixin._execute_mock_call' was never awaited [/code] Похоже, что мой патч не существует ... потому что он входит в функцию вместо использования Mock Я ожидаю правильно использовать макет и просто работать как ожидалось:/
Я кодирую приложение Fastapi с асинхронными функциями. My issue is, I can't properly mock async function with the mocker.patch from pytest-mock nor with AsyncMock from unittest.
The issue is, I can't test this function in the file...
Я написал модульный тест, который записывает файл в файловую систему без указания пути к рабочему каталогу; поэтому, если он выполняется из каталога проекта, он записывает в корень проекта, если в родительском каталоге проекта, он записывает в...
Чтобы воспроизвести сбой pytest, я хотел бы запустить один или несколько тестов в определенной последовательности через pytest без изменения исходных исходных файлов (добавление маркеров не разрешено). Тесты разбросаны по нескольким исходным файлам,...
У меня есть несколько тестов, использующих расширение pytest-timeout, которые действуют как тесты в наборе тестов и выглядят примерно так:
@pytest.mark.timeout(10.0)
def test_something():
# Do the test