Во время разработки я все же рекомендую настроить phpunit на phpstormе. Artisan test хорош именно запустить чужой код, а при написании тестов и проверки, он не удобный, по сравнению с возможностями IDE, там и подсветка, и сравнение результатов, и кликабельные ссылки на код и перезапуск проваленных и еще много других фишек. Настраивается он достаточно просто, так как у Laravel в vendorе уже есть phpunit/phpunit и можно прям на него ссылку указать на исполняемый файл. Хорошая работа, молодцы, что делаете видео. Свои комментарии чисто как советы даю:)
Да. Просто для начинающих проще из партизана запустить. Кстати не пробовал ещё и фильтры в artisan test. Из шторма горячими клавишами можно запустить вообще только конкретный тест ) Спасибо за отзыв, стараюсь )
@@rdavydov дружище, да просто что то расскажи, какая бы примитивная тема не была, открываю твоё видео и узнаю что то прям классное, тем более на руютубе оч мало по датагрипу инфы, ну расскажи что там из пхпштрма взято, я например, не знаю
Ну и целом комментарий по тестам. Мне кажется на текущем примере вы создаёте именно unit тестирование, проверяя работу методов класса Модели на определенном объекте. То есть привязываетесь к конкретной реализации классов, и если захотите перекомпоновать методы, изменить их, или вообще проверку вынести в какой-нибудь сервис (например policy), то тесты придется переписывать. В unit тестах нет ничего плохого пока вы тестируете библиотеки с реализацией определенных интерфейсов, а вот для целого приложения больше подходят функциональные тесты. А именно. К примеру в программе вы выводите какой-то результат в зависимости от статуса тикера. Лучше написать тест, что если мы создали тикеры, к примеру, а потом над некоторыми провели операции, то они должны перестать быть новыми и надо проверить, что на выводе кого-нибудь запроса они будут отсутствовать. Тогда вы отвязываетесь от конкретной реализации, а тестируете только конечный функционал для пользователя. И если у вас изменятся названия методов и логика проверки, то тест по прежнему должен проходить успешно, чем Вы и сэкономите время на проверки правильности работы приложения. Если вкратце, вы когда пишете код, вы всегда проверяете его работу. СОздаете что-то, отправляете запросы, смотрите результат. Возложите эти задачи на тесты.
@@allay138 наверное да. но вообще терминологии много. обычно интеграционное тестирование оно меньше про проверку конкретной логики, но больше про проверку работы в конкретной среде (к примеру с реальным сервером базы данных). Но как я сказал терминология может даже в разных командах отличаться
1) В фабрике role_id зачем передается closure? Можно просто написать 'role_id' => Role::inRandomOrder(). 2) Сразу же возвращаете id, а что если таблица пустая, вернется ошибка. Если это не противоречит логике, то норм 3) Статические методы идут без подсказок PHPStormа. Рассматривали ide_helper?
1. А это не глобальный скоуп без вызова самого запроса? Вернёт ли он чего? Или вопрос именно в целесообразности анонимки?) Если работает без неё в 8ке - значит не досмотрел обновления с более старых версий) 2. Не понял, про какое место идёт речь? Про ту же анонимку? Подразумевается запуск сидов перед тестом 3 как-то пока к нему не пришёл. Пробовал давно, чем не понравился или не устроил - не помню)
@@rdavydov 1. В данном случае это просто фишка php. Вы организуете ассоц массив и там в качестве значения можно прямо метод вставлять. first() - это метод, вызывается из класса модели, возвращает null, либо экземпляр модели. Поэтому closure тут лишнее. У вас по сути все то же самое, функция также возвращает данные. 2. Вы потом по цепочке в этом же месте вызываете ->id. Тут не ошибка, просто first() может теоретически вернуть null(если ничего не найдет) и тогда php будет ругаться, что вы вызываете свойство id на null. Тут просто уточнение, что всегда должно заранее быть создана хотя бы одна запись в базе. 3. Да, тут вкусовщина. Но ide не знает, что за статический метод вызывается, не знает, что он возвращает и как с ним работать. В итоге все автодописывания и подсказки не работают. Я видел еще реализацию через doc блоки на базовом классе модели. Описания же эти я по сути копировал из описания самих методов в фреймворке.
По поводу тестовой базы данных. Чисто моя рекомендация, что если тест будет запускаться без установленной на localhostе базы данных и без созданной такой базы, или база вообще будет другая. Мне кажется лучше не привязываться к конкретному подключения а для тестов запускать на sqlite. Он локально создаёт файлы и все можно проверить, в итоге вообще не потребуется среда.
С одной стороны - возможно. С другой - если проект сложный, отличия даже в версиях MySQL/MariaDB могут повлиять на выполнение кода/теста, чего уж говорить о другой СУБД. Хотя опять же, всё зависит от конкретного проекта.
@@rdavydov согласен. Просто мое мнение, что раз учите новичков, то лучше чтоб тесты не были привязаны к среде разработки. А тут прям привязка к названию локальной базы данных и месте ее установки, поэтому мне и кажется, что sqlite настроенный по умолчанию в ларавеле куда лучше подходит для старта.
@Анатолий Димов меня останавливал софт для занятий с гитарой. Всё что есть на убунту - в очень плохом состоянии. Сейчас это не требуется - уже проще. офис есть (LibreOffice), фотошоп не нужен.. Торенты есть. Телеграм, скайп есть.. В общем-то никакой острой необходимости не испытываю. Разве что запускал старенькие игры типа HoMM 3 на винде) По разметке давно не парюсь: читал про то, что рекомендуют для SWAP-раздела выделять: сейчас есть смысл выделять 12-16гб в зависимости от оперативной памяти (меньше 16гб оперативной памяти - 12гб SWAP, 16 и более - 16), плюс ко всему сейчас это не раздел, а файл - увеличивается или меняется "на лету". А так - просто привыкать.. Мне сейчас винда кажется чем-то странным)
Очень нравится, как вы объясняете) Я вот заметил, что вы присвоили свойство через ===, в чем разница ? Я понимаю, что так сравнивают и по типу, но не понял зачем здесь использовалось)
Спасибо. По поводу проверки == и === там идёт проверка по типу при строгом равенстве (3 равно) Это не присвоение. А если в случае какой-то ошибки, в поле статус будет null и я буду использовать не строгое равенство - метод inNew вернёт true, хотя это будет не верно
@@rdavydov а ты будешь ещё выпускать уроки или пока всё? Было бы круто если бы у тебя был телеграмм канал где ты бы выкладывал новости и объявлял бы о том что ты подготавливаешь сейчас и какие выпуски ждать, а то так часто бывает что все подписчики ждут не зная чего и вообще чего ждут не знают))
@@rdavydov Вас как оказалось не так просто найти, перерыл весь гугл в поисках русскоязычных курсов, то воспринимать лектора не возможно, то версии от актуальной картины сильно далеки, чудом ютуб выдал в рекомендациях ваш канал, и оказалось что тут кладезь полезной информации и многим видео более года, но поиск выдавал иностранный контент или откровенный шлак. До недавнего времени информации по версии выше 5.6 практически не было, на данный момент тема набирает популярность, много стало появляться видео по 8ке, но лучше ваших пока не видел)
Во время разработки я все же рекомендую настроить phpunit на phpstormе. Artisan test хорош именно запустить чужой код, а при написании тестов и проверки, он не удобный, по сравнению с возможностями IDE, там и подсветка, и сравнение результатов, и кликабельные ссылки на код и перезапуск проваленных и еще много других фишек.
Настраивается он достаточно просто, так как у Laravel в vendorе уже есть phpunit/phpunit и можно прям на него ссылку указать на исполняемый файл.
Хорошая работа, молодцы, что делаете видео. Свои комментарии чисто как советы даю:)
Да. Просто для начинающих проще из партизана запустить. Кстати не пробовал ещё и фильтры в artisan test. Из шторма горячими клавишами можно запустить вообще только конкретный тест )
Спасибо за отзыв, стараюсь )
@@rdavydov да, там при чем и подсветка будет, какой прошел. какой нет, и тест и файл и папку. Очень удобно.
@@maxshaian7260 там и подсветка кусков кода который повторяется в файлах
Спасибо большое, за хорошо разъясненную тему про тесты, давно хотел понять, что это такое вообще, данный урок это хорошо раскрывает.
Ютуб порекомендовал это видео, давно искал такие уроки. Спасибо за ваши труды, жду продолжения.
Спасибо Ютюбу)
Жду обзор на DataGrip от тебя, я думаю ты сделаешь это, как всегда, круто.
Спасибо за урок!
А чего его обозревать? Типа горячие клавиши и остальное? Там фишка в том, что действует очень многое из шторма
@@rdavydov дружище, да просто что то расскажи, какая бы примитивная тема не была, открываю твоё видео и узнаю что то прям классное, тем более на руютубе оч мало по датагрипу инфы, ну расскажи что там из пхпштрма взято, я например, не знаю
@@liteleak4049 Окей )
Ну и целом комментарий по тестам. Мне кажется на текущем примере вы создаёте именно unit тестирование, проверяя работу методов класса Модели на определенном объекте. То есть привязываетесь к конкретной реализации классов, и если захотите перекомпоновать методы, изменить их, или вообще проверку вынести в какой-нибудь сервис (например policy), то тесты придется переписывать.
В unit тестах нет ничего плохого пока вы тестируете библиотеки с реализацией определенных интерфейсов, а вот для целого приложения больше подходят функциональные тесты.
А именно. К примеру в программе вы выводите какой-то результат в зависимости от статуса тикера. Лучше написать тест, что если мы создали тикеры, к примеру, а потом над некоторыми провели операции, то они должны перестать быть новыми и надо проверить, что на выводе кого-нибудь запроса они будут отсутствовать. Тогда вы отвязываетесь от конкретной реализации, а тестируете только конечный функционал для пользователя. И если у вас изменятся названия методов и логика проверки, то тест по прежнему должен проходить успешно, чем Вы и сэкономите время на проверки правильности работы приложения.
Если вкратце, вы когда пишете код, вы всегда проверяете его работу. СОздаете что-то, отправляете запросы, смотрите результат. Возложите эти задачи на тесты.
Наверно интеграционное тестирование
@@allay138 наверное да. но вообще терминологии много. обычно интеграционное тестирование оно меньше про проверку конкретной логики, но больше про проверку работы в конкретной среде (к примеру с реальным сервером базы данных).
Но как я сказал терминология может даже в разных командах отличаться
Спасибо, а то хочется писать через тестирование, и читал про это, но как применять неизвестно было)
1) В фабрике role_id зачем передается closure? Можно просто написать 'role_id' => Role::inRandomOrder().
2) Сразу же возвращаете id, а что если таблица пустая, вернется ошибка. Если это не противоречит логике, то норм
3) Статические методы идут без подсказок PHPStormа. Рассматривали ide_helper?
1. А это не глобальный скоуп без вызова самого запроса? Вернёт ли он чего? Или вопрос именно в целесообразности анонимки?) Если работает без неё в 8ке - значит не досмотрел обновления с более старых версий)
2. Не понял, про какое место идёт речь? Про ту же анонимку? Подразумевается запуск сидов перед тестом
3 как-то пока к нему не пришёл. Пробовал давно, чем не понравился или не устроил - не помню)
@@rdavydov 1. В данном случае это просто фишка php. Вы организуете ассоц массив и там в качестве значения можно прямо метод вставлять. first() - это метод, вызывается из класса модели, возвращает null, либо экземпляр модели. Поэтому closure тут лишнее. У вас по сути все то же самое, функция также возвращает данные.
2. Вы потом по цепочке в этом же месте вызываете ->id. Тут не ошибка, просто first() может теоретически вернуть null(если ничего не найдет) и тогда php будет ругаться, что вы вызываете свойство id на null. Тут просто уточнение, что всегда должно заранее быть создана хотя бы одна запись в базе.
3. Да, тут вкусовщина. Но ide не знает, что за статический метод вызывается, не знает, что он возвращает и как с ним работать. В итоге все автодописывания и подсказки не работают. Я видел еще реализацию через doc блоки на базовом классе модели. Описания же эти я по сути копировал из описания самих методов в фреймворке.
По поводу тестовой базы данных. Чисто моя рекомендация, что если тест будет запускаться без установленной на localhostе базы данных и без созданной такой базы, или база вообще будет другая. Мне кажется лучше не привязываться к конкретному подключения а для тестов запускать на sqlite. Он локально создаёт файлы и все можно проверить, в итоге вообще не потребуется среда.
С одной стороны - возможно. С другой - если проект сложный, отличия даже в версиях MySQL/MariaDB могут повлиять на выполнение кода/теста, чего уж говорить о другой СУБД. Хотя опять же, всё зависит от конкретного проекта.
@@rdavydov согласен. Просто мое мнение, что раз учите новичков, то лучше чтоб тесты не были привязаны к среде разработки. А тут прям привязка к названию локальной базы данных и месте ее установки, поэтому мне и кажется, что sqlite настроенный по умолчанию в ларавеле куда лучше подходит для старта.
Спасибо огромное еще раз за твой труд , надеюсь скоро ты достигнешь высот ютуба) как можно тебя найти в соцсетях ?
Зачем я нужен то в соцсетях?)
@Анатолий Димов да, уже пару лет основная наверное. Точнее как. Есть параллельно установленная на одном компе и есть только убунту на другом рабочем
@Анатолий Димов меня останавливал софт для занятий с гитарой. Всё что есть на убунту - в очень плохом состоянии. Сейчас это не требуется - уже проще. офис есть (LibreOffice), фотошоп не нужен.. Торенты есть. Телеграм, скайп есть.. В общем-то никакой острой необходимости не испытываю. Разве что запускал старенькие игры типа HoMM 3 на винде) По разметке давно не парюсь: читал про то, что рекомендуют для SWAP-раздела выделять: сейчас есть смысл выделять 12-16гб в зависимости от оперативной памяти (меньше 16гб оперативной памяти - 12гб SWAP, 16 и более - 16), плюс ко всему сейчас это не раздел, а файл - увеличивается или меняется "на лету".
А так - просто привыкать.. Мне сейчас винда кажется чем-то странным)
Очень нравится, как вы объясняете) Я вот заметил, что вы присвоили свойство через ===, в чем разница ? Я понимаю, что так сравнивают и по типу, но не понял зачем здесь использовалось)
Спасибо. По поводу проверки == и === там идёт проверка по типу при строгом равенстве (3 равно)
Это не присвоение. А если в случае какой-то ошибки, в поле статус будет null и я буду использовать не строгое равенство - метод inNew вернёт true, хотя это будет не верно
@@rdavydov понял, благодарю за ответ)
я так понимаю интерфейс по плану на Vue JS ты хотел допилить?! или 10-й урок это финальный урок?
Хотел на vue, да. пока времени нет и война идёт - да, последний ))
Кто поможет? Запускаю тесты через php artisan test , а он мне пишет No tests executed! А при запуске прямо из файла все работает... (macOS/PHPStorm)
composer dump-autoload ?
@@rdavydov попробую, спасибо
@@rdavydov No tests executed! Тоже самое
@@ПавелПотапенко-щ2ж а названия классов, названия методов или аннотации какие ?
@@rdavydov да все по дефолту, ничего не менял)
Приветствую Роман, скажи пожалуйста, как можно с тобой связаться?
Я оставил в почте почту romansdavydov@gmail.com
На Laravel можно делать сайты?
Это самый тупой вопрос который я видел на тему ларавела
Я так понимаю что CRM уже готова?
Нет. Но донатов нет, времени не хватает - потому пока не пишу дальше
Это последний видео урок по хелпдеску?
из записанного да. как будет время - продолжу
@@rdavydov а ты будешь ещё выпускать уроки или пока всё? Было бы круто если бы у тебя был телеграмм канал где ты бы выкладывал новости и объявлял бы о том что ты подготавливаешь сейчас и какие выпуски ждать, а то так часто бывает что все подписчики ждут не зная чего и вообще чего ждут не знают))
@@Кочевник-р2е пока немного сдулся. Но если часто пингуют - появляется желание ;)
Постараюсь продумать в ближайшее время дальнейшие уроки
@@rdavydov открой платный канал тогда
@@Кочевник-р2е думаю что с 2,5к подписчиков такой функции нет
Вы Docker используете?
Не сильно много. Точнее даже сейчас только для базы на локалке
Автор вы куда пропали?
Пока нет времени записывать дальше. Да и отклик меньше чем хотелось бы
@@rdavydov Вас как оказалось не так просто найти, перерыл весь гугл в поисках русскоязычных курсов, то воспринимать лектора не возможно, то версии от актуальной картины сильно далеки, чудом ютуб выдал в рекомендациях ваш канал, и оказалось что тут кладезь полезной информации и многим видео более года, но поиск выдавал иностранный контент или откровенный шлак.
До недавнего времени информации по версии выше 5.6 практически не было, на данный момент тема набирает популярность, много стало появляться видео по 8ке, но лучше ваших пока не видел)
@@freez151 спасибо ) будет возможность - буду продолжать )
@@rdavydov Ждём продолжения :)
Рома привет, куда пропал? Где контент! Вернись, мы еще лайков накидаем!
Лето заканчивается, и я почти готов продолжать )))
@@rdavydov Отлично! Ждем.
@@rdavydov Было бы интересно увидеть авторизацию/регистрацию
А VueJS вообще будет?)
Будет после бэкенда