x
Да, ок ) я понял
x
Просто пытаюсь понять как юнит тестировать это
Vasily
Я бы написал по-другому
x
Нужно будет создавать джунгли и обезьяну даже для тех кому нужен только банан
Ayrat
Просто пытаюсь понять как юнит тестировать это
ну так мокнуть конфиг и жсонСериалайзер (который в общем можно к функии свести 'a -> string
Vasily
Там можно попроще\
Ayrat
Нужно будет создавать джунгли и обезьяну даже для тех кому нужен только банан
в конкретном примере джунгли и обезьяна нужны всем. Вполне логично что в финальном webApp я рисую и функции которые не являются мемберами классов, а сами по себе
Ayrat
Не надо думать что я в этот класс всё пихаю. Нет. В него засунуты функции которым нужны эти зависимости.
Ayrat
Там можно попроще\
жги, мне правда интересно
Ayrat
я всегда за хорошие подходы
Romɑn
Ayrat
а, ок. но вот моки. как бы без моков
Не очень ясно почему тебе не нравятся моки!
Vasily
let createRoute path auth routeData= route path>=>jacAuthorize auth>=>routeData|>List.map (fun (m,f)->m>=> f zodConfig serializer)|>choose
Igor
Не очень ясно почему тебе не нравятся моки!
А ты вообще не пишешь интегрейшены и е2е?
Ayrat
Как мне могут в этом помешать моки в юнит тестах?
Vasily
В общем, я про то, что бойлерплейта в данном коде можно убрать много
Igor
Не очень ясно почему тебе не нравятся моки!
Кстати можешь прикинуть сколько у тебя чистого когда, а сколько с эффектами/DI и тд?
Igor
Печально
Ayrat
Согласен
x
Не очень ясно почему тебе не нравятся моки!
испытываю личную неприязнь, кущать даже не могу
Igor
Я тут было хотел предложить глобальные переменные для кода с эффектами... но если весь код такой...
Ayrat
В общем, я про то, что бойлерплейта в данном коде можно убрать много
Я даже попытался. createRoute "api/v1/scheduledaction/priceoverride" "api.zod.priceoverride" [ POST, addPriceOverride PUT, updatePriceOverride ] createRoute "api/v1/scheduledaction/priceoverride/cancel" "api.zod.priceoverride.cancel" [ POST, cancelPriceOverride ]
Igor
испытываю личную неприязнь, кущать даже не могу
Ну да, я вообше считаю что это "эффекты" и их НЕ надо тестировать юнитами. Только проперти (для pure) и интегрейшены - только хардкор)
Ayrat
В общем, я про то, что бойлерплейта в данном коде можно убрать много
вот полный пример https://gist.github.com/Szer/a7c3b64d10b3e3c3964fbf41985368ba
Ayrat
Ну вроде выглядит ок
на мой взгляд если и лучше, то на каплю. Но спасибо за попытку
Vasily
Ну как минимум рыбок поменьше
Vasily
НО
Vasily
МОЖНО УПРОСТИТЬ ЕЩЕ
Vasily
Если поменять сигнатуру createRoute на кортеж
Vasily
Хотя в целом однохуйственно
Vasily
От строчек никуда не деться...
Vasiliy
@omgszer Дошли руки до сваггера в жирафе? или я пропустил сообщение
Ayrat
@omgszer Дошли руки до сваггера в жирафе? или я пропустил сообщение
Не дошли. В общем т.к. у меня тут все апи свои, в общем похуй пока, но всё ещё в беклоге
Vladislav
пора пронет в фшарп чат переименовывать
Vasily
Пока рано
Vladislav
кстати
Vladislav
а нет, я подумал наркоманию
Vladislav
Не говорит, а вбрасвыает! Не путай тёплое с мягким. Говорит он в другом месте.
Vladislav
@alexey_tkachenko_by ))
Alexey
:P
Крылатый
В бан?
Shub
минвайл, сегодня в корпчатике обсуждалось такое:
Shub
anyone have any luck with introducing type safety into message templates in structured logging? i'm currently hung up on the following: log.info("Update on record id '{id}' failed.",recordId) however, there's no type safety on this -- you could just as easily do any of the following: log.info("Update on record id '{id}' failed.") log.info("Update on record id '{id}' failed.",None,15,"wtf")
Shub
не обошлось и без наших:
Shub
I created something that uses anonymous records and a tiny bit of reflection (which can be obviated) to avoid constructing strings with separators in code.
Ayrat
Да, я тоже поржал.
Shub
Да, я тоже поржал.
ну это был очень биг дил здесь.
Shub
причем там все четко, как в армии. оно берет на вход Result<>, и в зависимости от веточки делает либо log.error, либо log.info
Shub
потому что нахер эти все остальные уровни, правда?
Shub
пулл-реквест весь во флюродросе типа “ой, ты такой умный”
Hog
ещё тема, что лени-то у нас - хрен да маленько
Hog
поэтому все дебаги многочисленные даже при отключении через конфиг
Hog
всё равно будут срать
Shub
let tryFirst list = list |> tryNth 0
Shub
че-то это уже браконьерство напоминает
Hog
хед чем не угодил?
Shub
Vasily
tryHead же есть
Vasily
Есть tryItem
Vasily
А не, tryItem нет
Shub
мне очень нужны шумоподавляющие наушники. невозможно слушать все эти охуительные истории с покерфейсом
Shub
архитект на сложных щщах рассказывает, как в F# не нужны интерфейсы, потому что есть DU
Vasily
Еще SRTP есть
Daniil
Bose QC35 II
Daniil
хорошо звучат
Igor
архитект на сложных щщах рассказывает, как в F# не нужны интерфейсы, потому что есть DU
Слушай умного человека, может ума наберешься что бы архитектором стать
Igor
Крылатый
Крылатый
Блин, жаль нет меньше стикера((
Igor
Специально не далал, там глюки в телеге начинаются