Ошибка насмешки `requests.get ()` и извлечение `urllib.parse.urlparse ()` Результаты при тестировании конечной точки FasPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Ошибка насмешки `requests.get ()` и извлечение `urllib.parse.urlparse ()` Результаты при тестировании конечной точки Fas

Сообщение Anonymous »

Я пытаюсь написать модульный тест для конечной точки FastAPI, и я не смог высмеивать requests.get () вызов, выполненный в функции. Кроме того, в конечной точке есть вызов urlparse () , значение которого я хотел бы извлечь и проверить.

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

# my_pkg.api

import requests
from fastpi import APIRouter
from pydantic import BaseModel  # Pydantic 
[code]# tests/test_api

from typing import Optional
from unittest.mock import Mock, patch
from urllib.parse import urlparse

from fastapi import FastAPI
from fastapi.testclient import TestClient
from pytest import mark

from my_pkg.api import router

app = FastAPI()
app.include_router(router)
client = TestClient(app)

test_upload_file_params_matrix = (
# Rsync URL | Rsync module | Source directory |
(
"http://1.1.1.1",  # When rsync_url is provided
"data",
"/c/ProgramData/Some Program/Some Files",
),
(
"",  # When rsync_url is blank
"data",
"/c/ProgramData/Some Program/Some Files",
),
(
None,  # When rsync_url not provided
"data",
"/c/ProgramData/Some Program/Some Files",
),
)

@mark.parametrize("test_params", test_upload_gain_reference_params_matrix)
@patch("my_pkg.api.subprocess")
@patch("my_pkg.api.urlparse", wraps=urlparse)
@patch("my_pkg.api.get_server_url")
@patch("my_pkg.api.requests")
def test_upload_file(
mock_request,
mock_get_server_url,
spy_parse,
mock_subprocess,
test_params: tuple[Optional[str], str, str],
):

# Create a mock config based on the test params
rsync_url, rsync_module, source_dir = test_params
server_url = "http://0.0.0.0:8000"
mock_config = {
"rsync_module": rsync_module,
"source_directory": source_dir,
}
if rsync_url is not None:
mock_config["rsync_url"] = rsync_url

# Assign expected values to the mock objects
mock_response = Mock()
mock_response.status_code = 200
mock_response.json.return_value = mock_config
mock_request.get.return_value = mock_response
mock_get_server_url.return_value = server_url
mock_subprocess.run.return_value = Mock(returncode=0)

# Construct payload and submit post request
payload = {
"gain_path": f"{source_dir}/file.txt",
"destination_path": "some/path/to/save/to",
"destination_dir": "processing",
}
response = client.post(
"/names/hello/ids/1/upload_file", json=payload
)

# Check that the config request was called
mock_request.get.assert_called_once()

# If no rsync_url key is provided, or rsync_url key is empty,
# This should default to the Murfey URL
returned_urlparse = spy_parse.return_value
expected_urlparse = urlparse(server_url) if not rsync_url else urlparse(rsync_url)
assert expected_urlparse.scheme == returned_urlparse.scheme
assert expected_urlparse.netloc == returned_urlparse.netloc
assert expected_urlparse.path == returned_urlparse.path

# Check that the subprocess was run
mock_subprocess.run.assert_called_once()

# Check that the endpoint function ran through to completion successfully
assert response.status_code == 200
assert response.json() == {"success": True}
< /code>
Я сейчас сталкиваюсь с парой ошибок. Первый - это то, что requests.get () 
не вызывается. И второе - это то, что spy_parse.return_value возвращает объект Magicmock вместо parseresult объекта.
Как можно настроить мой код для решения этих проблем?>

Подробнее здесь: https://stackoverflow.com/questions/795 ... se-results
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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