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

А кто-нить эмулировал hackney в тестах? Я хочу сгенерить ответ с

client_ref, но что-то ерунду пишу всё время.
При ответе он возвращает {:ok..... client_ref}, который надо body(client_ref) и он достаёт тело ответа.
Что-то никак не могу найти как оно делается.

30 ответов

94 просмотра

мы не трогаем клиент, мы поднимаем фейковый сервер

Зачем эмулировать hackney??

Д.-П. Автор вопроса
Alex Bubnov
мы не трогаем клиент, мы поднимаем фейковый сервер

а в общих чертах как подымаете? у меня тут два сервиса, тоже надо как-то мокать или эмулировать или одно из двух.

Д. П.
а в общих чертах как подымаете? у меня тут два сер...

примерно так: поднимаем дополнительный эндпойнт в suite setup в тесте регистрируем в глобальном хранилище request-id и желаемый ответ тестируемый код кидает запрос в этот эндпойнт с этим request-id хэндлер эндпойнта идет в глобальное хранилище и достает ответ по request-id

Alex Bubnov
bypass чего и где

Либа такая. Выглядит так Bypass.expect(bypass, "GET", "/file", fn conn -> Plug.Conn.resp(conn, 200, "This is body") end)

Lama Lover
Жесть какая-то. Вы про bypass слышали?

помойка ебаная, если надо разные данные отправлять приходится внешний стейт колхозить

Lama Lover
Либа такая. Выглядит так Bypass.expect(bypass, "GE...

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

Alex Bubnov
а ну у нас кодовая база на эрланге плюс я не очень...

Считает сколько раз вызывалось и всё. Он очень простой

Lama Lover
Ничего не понял

как ты байпасу объяснишь что надо сначала один ответ отправить, а на повторный запрос другой?

Fried Zucchini
как ты байпасу объяснишь что надо сначала один отв...

Через внешний стейт. А в чём тут проблема? Так любой request-reply делается

Lama Lover
Считает сколько раз вызывалось и всё. Он очень про...

ну то есть, два параллельных теста, ожидающих разные ответы ты не сделаешь на нем

Fried Zucchini
как ты байпасу объяснишь что надо сначала один отв...

С моками и всем остальным ничего не сделаешь

Alex Bubnov
ну то есть, два параллельных теста, ожидающих разн...

Нет, параллельные тесты сделаешь. Там разные инстансы мок-сервера поднимаются для каждого теста

Fried Zucchini
ну я и говорю помойка недоделанная

То есть любая тема для интеграционного тестирования в Elixir это недоделанная помойка. Понял

Lama Lover
Нет, параллельные тесты сделаешь. Там разные инста...

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

не в конфиг, а в базу конфигурации, чуть разные вещи

Alex Bubnov
не в конфиг, а в базу конфигурации, чуть разные ве...

Да, это не просто хуйня, а хуйня на блюдце с золотой каёмкой :)

Lama Lover
Да, это не просто хуйня, а хуйня на блюдце с золот...

а как ты иначе свяжешь эти адреса с более бизнесовыми сущностями? у нас сейчас этих эндпойнтов на проде 50 штук, из них на отдельную транзакцию используется 4 в разных ролях.

Alex Bubnov
а как ты иначе свяжешь эти адреса с более бизнесов...

А что мешает-то эндпоинт подменить в том месте, которое вы тестируете?

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

Alex Bubnov
мы их не совсем подменяем мы подкладываем под тест...

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

Alex Bubnov
это не юнит-тесты, это где-то между функциональным...

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

Lama Lover
На интеграционном тестировании, тестируется только...

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

Alex Bubnov
в такой терминологии это функциональные тесты подк...

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

Lama Lover
Тогда вы бы не мокали внешние сервисы, а вы бы луч...

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

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

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

30500 за редактор? )
Владимир
47
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
1
Он в одиночку это дело запилил или была какая-то команда?
Aquinary
12
~ 2m21s  nix shell github:nixos/nixpkgs#stack ~  stack ghc -- --version error: … while calling the 'derivationStrict' builtin at /builtin/derivation.nix:...
Rebuild your mind.
6
Всем привет, нужна как никогда, нужна помощь с IO в загрузчике. Пишу в code16 после установки сегментных регистров, пишу вывод символа. Пробовал 2 варианта: # 1 mov $0x0E, %a...
Shadow Akira
14
Карта сайта