Вступить в клуб →
сложнаявопросТестирование: pytest, фикстуры, моки

Замокали requests.get, а тест всё равно ходит в сеть

Файл app/rates.py:

from requests import get

def fetch_rate(currency):
    return get(f"https://rates.example/{currency}").json()["rate"]

Тест:

from unittest.mock import patch
from app.rates import fetch_rate

def test_fetch_rate():
    with patch("requests.get") as fake_get:
        fake_get.return_value.json.return_value = {"rate": 90}
        assert fetch_rate("USD") == 90

Тест делает настоящий HTTP-запрос. Почему?

  • Нужно патчить app.rates.get — модуль держит свою ссылку на функцию
  • patch не работает как контекстный менеджер, только декоратором
  • return_value.json надо задать до входа в блок with
  • requests нельзя мокать, только через отдельную библиотеку

🔒 Проверка ответа — для участников клуба

  • Проверка ответа
  • Подсказка, если застряли
  • Разбор с объяснением, почему так
  • Прогресс по всем задачам и виртуальные собеседования
Зарегистрироваться →

Регистрация занимает минуту

Другие задачи раздела