170 похожих чатов

В чем причина что функция не мокается? Вроде бы прописываю

путь именно ттам где она импортится, и вызывается, не помогает
@cutwater
def mock()
with patch('src.routers.graphql.graphql.get_table_schemas') as mock_function:
mock_function.return_value = 0
from src.server import create_app
app = create_app()
mock_function.assert_called_once()
return app


На скринах видно как она вызывается - сначала через импорт graphql_app , сам он в другом модуле что я указал как аргумент для патча вызывает метод класса в котором и используется get+table_schemas что нам и надо подменить, в чем ошибка? 4 дня потратил не смог понять

19 ответов

6 просмотров

Опять путают моки и патчи

По хорошему у тебя не должно быть патчей в тестах https://t.me/advice17/31

Tishka17
По хорошему у тебя не должно быть патчей в тестах ...

бгы. ты наверное очень любил гевент раньше

Dmitriy-Тiutiunnyk Автор вопроса
Tishka17
По хорошему у тебя не должно быть патчей в тестах ...

такой кейс что без них не обойтись. Есть функция что вызывается внутри при запуске аппки, как я описал и парсит схемы, нужно еще добавить к ней тестовые схемы которых в реальности нет. Пытался запатчить в том же модуле где она вызывается как и нужно, но потерпел неудачу

Dmitriy Тiutiunnyk
такой кейс что без них не обойтись. Есть функция ч...

Ну если будешь пытаться патчить, постоянно будет такая фигня

Dmitriy Тiutiunnyk
такой кейс что без них не обойтись. Есть функция ч...

Ты же в тестах контролируешь запуск аппа, почему бы его не подменить/не передать туда доп параметры?

Dmitriy Тiutiunnyk
такой кейс что без них не обойтись. Есть функция ч...

Надо сделать так, чтобы при создании приложения, ты мог передать свою функцию, которую ты сейчас хочешь пропатчить, либо передать туда нужный параметр

Dmitriy-Тiutiunnyk Автор вопроса
Tishka17
Ты же в тестах контролируешь запуск аппа, почему б...

а как это сделать? если оно вызывется не напрмую

Dmitriy Тiutiunnyk
а как это сделать? если оно вызывется не напрмую

Ты буквально напрямую в тестах создаешь app, не?

Dmitriy-Тiutiunnyk Автор вопроса
Tishka17
Ты буквально напрямую в тестах создаешь app, не?

да ,но функция оторую я патчу вызывается не там, а при импорте graphql_app и в том модуле где он инитиится и используются эта функция схем

Dmitriy Тiutiunnyk
такой кейс что без них не обойтись. Есть функция ч...

Ну, есть вариант временно вставить логирования стек трейса в исходную функцию, чтобы надёжнее определить, откуда же оно вызывается, если уж это вызывает проблему.

Почему у тебя какая-то функция вызывается при импорте? Не должно быть такого вообще

Dmitriy-Тiutiunnyk Автор вопроса
Tishka17
Почему у тебя какая-то функция вызывается при импо...

не так выразился, имел ввиду, что импортится graphql_app из модуля где импользуется функция для патча. в крейт апп нет этой функции что я патчу, поэтому я и патчу по другому пути, где она импортируется

Dmitriy Тiutiunnyk
не так выразился, имел ввиду, что импортится graph...

Либо ты считаешь что это деталь реализации и вообще делаешь вид что ее не существует. Либо передалываешь фабрику аппа так, чтобы это можно было подменить или настроить

Dmitriy-Тiutiunnyk Автор вопроса
Tishka17
Либо ты считаешь что это деталь реализации и вообщ...

первый вариант не понял, как это решит мою проблему?

Dmitriy Тiutiunnyk
первый вариант не понял, как это решит мою проблем...

Первый вариант означает что не существует никакой функции get_table_schemas и вообще схем и все работает на магии и никак не изменить. Соответственно, надо тестировать исходя из этого

Dmitriy-Тiutiunnyk Автор вопроса
Tishka17
Первый вариант означает что не существует никакой ...

а в чем причина тогда ,что эту проблему решить невозможно? вроде по доккументации патчей так можно делать

Похожие вопросы

Обсуждают сегодня

я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
короче сгенерила мне эта штука код на ассемблере: struc string val { common local .value dq .value .value: if ~val eq db val end if db 0 } fo...
Vi Chapmann Chapmann
12
Всем привет! Массив вводится с клавиатуры, кол-во элементов неизвестно, поэтому я указал arr db 100 dup(?) С нахождением максимума проблем нет, а вот минимум почему-то всегд...
En Vind Av Sorg
11
#include <stdio.h> int main(void) { int n; scanf("%d", &n); int digits1[n] = {0}; int digits2[n] = {0}; я не могу таким образом заранее массив нулями заполнить?
Linus
12
в сях есть множество как в питоне? для удаление дубликатов
Linus
25
я про форму записи. смысл указывать что 8 байтный регистр 8 байт?
Aiwan \ (•◡•) / _bot
10
читать файл максимально быстро? странный вопрос))
zamtmn
53
Вроде бы вопрос уже заезжанный, но тем не менее У меня есть функция menu() которая выводит набор возможных действий, а затем спрашивает у пользователя что он хотел бы сделать....
David Golovatin
3
Кто создает тут ботов для телеграмм групп ?
Antskup
8
а как бы вылезти из ИО, что то типа IO -> Ether или в какую сторону смотреть ? что то туплю
Fedor
14
Карта сайта