ojab
24.02.2018
14:46:09
if @reservation.valid? вынести из транзакции и превратить в guard clause
добавить проверку на reservation_type
biert
24.02.2018
14:46:50
огромное спасибо
ojab
24.02.2018
14:47:02
(i. e. когда он не now и не later)
Google
ojab
24.02.2018
14:47:34
@reservation.final_cost = @reservation.calculated_cost_of_ride ugh
это должно быть в модели, если ты дёргаешь метод модели и присваиваешь аттрибуту модели
вообще всё что связано с output можно в модель вынести
biert
24.02.2018
14:50:24
мне нравится пока что рефакторить код немного легче чем его переписывать, я думал надо будет почти все менять, а получается что более менее
ojab
24.02.2018
14:50:35
reservation.try_drivers(@params[:drivers_ids]) как в params вообще :driver_ids появятся?
ReservationDetail.create bang it
biert
24.02.2018
14:52:04
в одном случае с клиента появляется, в другом получаю из метода
ojab
24.02.2018
14:52:50
зачем от клиента получать айдишники водителей?
biert
24.02.2018
14:54:00
в одном случае он дергает апи и получает список тех кто ему подходит, потом он себе подбирает тех кому ему подходят
ojab
24.02.2018
14:54:05
общие места из build_*_reservation тоже вынести в методы или ещё куда
biert
24.02.2018
14:55:38
я рад что я нашел этот паттерн
Google
biert
24.02.2018
14:55:51
а то думал как все свои толстые контролеры переписать
ojab
24.02.2018
14:56:32
to_formatted_s(:db) тебе вряд ли нужен
biert
24.02.2018
14:57:23
да, читал что надо везде использовать Time.current
огромное спасибо за ревью
ojab
24.02.2018
14:58:10
нет, это другой вопрос. Time.now не нужно никак приводить, его AR сама приведёт к нужному для БД виду.
Igor
24.02.2018
16:44:48
Всем привет. Еще такой вопрос по тестам. Есть класс А, класс Б и класс С, который юзает в себе А и Б.
На класс С тесты нужно писать такие чтобы покрывали исключительно логику класса С (то есть проверять что вызывается то-то с такими-то параметрами) или и логику классов А,Б.
С одной стороны хочется на 100 процентов проверить метод, с другой стороны дублирование тестов.
David
24.02.2018
16:50:35
Надо покрывать только класс C
Классы A и B надо стабить
ojab
24.02.2018
16:54:11
надо писать тесты, которые покрывают поведение, а не логику
логику вообще не надо тестировать
implementation details (i. e. логика) неважны совершенно
ну и тесты поведения обычно вполне дедуплицирются с помощью shared_examples и иже
David
24.02.2018
17:01:44
Igor
24.02.2018
17:03:02
будем стабить
ojab
24.02.2018
17:04:22
David
24.02.2018
17:07:58
А зачем? Я всегда думал, что изолированные тесты это более выгодная практика для unit тестирования.
Вроде как нашёл подтверждение на http://www.betterspecs.org/#single
ojab
24.02.2018
17:08:33
что такое "изолированные тесты"? Переписать логику, которая прописана в классе, в тестах?
А вообще важно, что класс С вызывапет класс А? Или важно что класс С создаёт какую-то условную запись в базе (которая создаётся классом А, при текущей реализации)?
Google
David
24.02.2018
17:11:13
ojab
24.02.2018
17:12:11
тогда при изменении класса А меняется поведение класса C, так что прошлые вызовы класса С могут делать совсем не то, что планировалось при написании тестов.
это не очень ок
Т. е. если содержимое класса А вообще удалить, то тесты будут проходить успешно, что не очень хорошо.
David
24.02.2018
17:15:36
Да но ведь, тестируя класс С, я хочу убедиться что работает именно он, а не класс А, потому что удаляя содержимое класса А, должен упасть юнит тест класса А. Разве не в этом смысл юнит теста?
PS: моя цель не поспорить, а узнать для себя сейчас что-то новое
ojab
24.02.2018
17:17:12
Юнит тесты класса А тоже удалятся, да. Суть в том что сторонние изменения ломают _поведение_ класса С. Так что человек, которому надо что-то поменять в классе А, запросто сломает _поведение_ твоего класса С.
потому что класс А стал делать не то, что было при написании класса С
логика/какие методы вызываются в процессе — это деталь реализации, их вообще не нужно проверять
Если класс делает то, что от него хотят — неважно что там внутри написано
David
24.02.2018
17:20:38
Я полностью согласен со всем, что ты говоришь, но мне кажется , что это больше к интеграционным тестам, когда тестируется именно то, как отдельные модули взаимодействуют между собой в группе http://softwaretestingfundamentals.com/integration-testing/
ojab
24.02.2018
17:21:50
unit-тесты — это тестирование методов
тестируя поведение — ты тестируешь поведение метода
(если считать unit-тестированием тестирование логики метода — то unit-тесты не нужны, да)
biert
24.02.2018
17:24:05
https://github.com/trailblazer/trailblazer походу крутая штука
ojab
24.02.2018
17:24:28
ибо тестирование поведения методов (пусть будет интеграционное тестирование) в любом случае нужно, но при наличии их — unit-тестирование нафиг не нужно, ибо ничего хорошего не привносит
Anton
24.02.2018
17:25:42
ojab
24.02.2018
17:26:41
David
24.02.2018
17:26:49
Google
ojab
24.02.2018
17:26:51
(вкратце и неточно)
Anton
24.02.2018
17:28:44
(вкратце и неточно)
Скорее это попытка сделать ддд Фреймворк для руби. Из-за того, что покрыть все и сразу не реально - получился комбайн, который плохо работает в специфичных случаях
Но идея и мотив - 10 из 10
biert
24.02.2018
17:32:57
Anton
24.02.2018
17:33:28
biert
24.02.2018
17:35:05
я вот пытаюсь понять чего лучше придерживаться, опыта и знаний не хватает, ну и полной картины не вижу, вот сейчас изучаю всякие видео из конференций, здорово помогает. Там услышал об этом
ojab
24.02.2018
17:35:24
trailblazer диктует единственно верную архитеутуру приложения, в то время как кустки dry.rb (i. e. dry-types/dry-transaction/etc) можно заюзать где удобно.
biert
24.02.2018
17:38:25
то есть более либерально, понял, спасибо
Anton
24.02.2018
17:40:04
biert
24.02.2018
17:41:50
я слишком тупой пока еще для dry-ruby
ojab
24.02.2018
17:42:20
biert
24.02.2018
17:51:18
мне кажется или много поляков в Rails комьюнити?
Anton
24.02.2018
17:52:06
biert
24.02.2018
17:52:41
значит мне так везет, а то часто попадаю на статьи или видео с ними
вижу большой минус видео с конференций, они как рекламный ролик, ты повелся, начал заниматься, а на деле оказалось что то что рекламируют вовсе тебе не нужно или в что похуже, вовсе плохое
Anton
24.02.2018
17:59:39
biert
24.02.2018
18:01:44
спасибо большое за интересный канал
Nikita
24.02.2018
18:04:04
Последний пост в сентябре 17, чет перерыв затянулся)
Nikita
24.02.2018
18:04:45
Антоха загулял
Shamil
24.02.2018
18:05:35
Google
Anton
24.02.2018
18:06:19
Nikita
24.02.2018
18:06:29
Это же хорошо
Anton
24.02.2018
18:06:31
Но я думаю скоро возобновлять
Nikita
24.02.2018
18:06:44
Да, было бы интересно
biert
24.02.2018
18:08:37
я не думал что во Львове есть комьюнити настолько серьезное, даже выхватили девелопера trailblazer
Nikita
24.02.2018
18:09:45
Зачем разделять по городам?
Alexander
24.02.2018
18:09:47
Всем привет. Кто-нибудь сталкивался с ошибкой Subscription class not found при настройке ActionCable? Я вроде все сделал по инструкции и 10 раз всё перепроверил, но рельсы как будто-бы не видят класс, описывающий вебсокет канал. Подробно написал тут: https://stackoverflow.com/questions/48965958/subscription-class-not-found-issue-with-actioncable
Nikita
24.02.2018
18:09:55
Комьюнити есть комьюнити
ojab
24.02.2018
18:12:03
spring перезапускал?
новые директории в /app подхватываются только после перезапуска, так что если после создания app/channels spring не перезапускался — рельсы не найдут NotificationsCountChannel
Alexander
24.02.2018
18:13:20
в гемах spring вообще нет
сразу скажу, что я фронт и я не так шарю во всей этой кухне
biert
24.02.2018
18:13:58
Nikita
24.02.2018
18:14:14
biert
24.02.2018
18:14:26
да, пользуюсь во всю
Alexander
24.02.2018
18:14:59
я же правильно понимаю, что если в списке гемов нет spring, то он не установлен и не используется?
Nikita
24.02.2018
18:15:29
Посмотри по депенси лока
Ничего его не тянет?
Nikita
24.02.2018
18:15:59
Он у тебя в как зависимость идёт, ему не обязательно быть в гемфайле
Alexander
24.02.2018
18:16:00
в gemfile.lock поиск по spring ничего не дает