Замокали 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 нельзя мокать, только через отдельную библиотеку
