@rubylang

Страница 1399 из 1684
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
в одном случае с клиента появляется, в другом получаю из метода

ReservationDetail.create bang it
не совсем понял

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 и иже

Igor
24.02.2018
17:03:02
будем стабить

ojab
24.02.2018
17:04:22
Как мне показалось, суть в том, что речь идёт о юнит тестах и тестируя класс С начинает повторяться тестирование класса А или В? Тогда я не совсем понимаю как могут помочь shared_examples ? ojab поясни пожалуйста
если класс A что-то делает и класс C вызвает класс А, чтобы это сделать — очевидно что все тесты, покрывающие этот случай, можно вынести в shared_examples и использовать как в классе А, так и в классе С.

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-тестирование нафиг не нужно, ибо ничего хорошего не привносит

https://github.com/trailblazer/trailblazer походу крутая штука
традиционно призывается @davydovanton

Anton
24.02.2018
17:25:42
ojab
24.02.2018
17:26:41
https://github.com/trailblazer/trailblazer походу крутая штука
короче это лютый комбайн, где всё слишком завязано друг на друга и dry.rb более лучше решает эти проблемы

Google
ojab
24.02.2018
17:26:51
(вкратце и неточно)

Anton
24.02.2018
17:28:44
(вкратце и неточно)
Скорее это попытка сделать ддд Фреймворк для руби. Из-за того, что покрыть все и сразу не реально - получился комбайн, который плохо работает в специфичных случаях

Но идея и мотив - 10 из 10

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
то есть более либерально, понял, спасибо

biert
24.02.2018
17:41:50
я слишком тупой пока еще для dry-ruby

ojab
24.02.2018
17:42:20
Когда опыта мало, с драем отстрелишь ногу
ну хз, скорее будешь применять там, где на самом деле не следует. Но ничето не мешает потом переписать какой-нибудь Dry::Container в голый класс.

biert
24.02.2018
17:51:18
мне кажется или много поляков в Rails комьюнити?

Anton
24.02.2018
17:52:06
biert
24.02.2018
17:52:41
значит мне так везет, а то часто попадаю на статьи или видео с ними

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

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
мне кажется или много поляков в Rails комьюнити?
Ага? но пишут на инглише, как раз хотел перевести пару штук на русский) ну так, для комюнити)

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

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 ничего не дает

Страница 1399 из 1684