A fim de estudar um pouco sobre TDD no Laravel, eis que me deparei com a playlist de tutoriais do canal Coder’s Tape.
O autor se propõe a criar um pequeno projeto de livraria, pra fazer checkout e checkin de livros e etc., mostrando o seu fluxo de trabalho e como ele utiliza TDD na prática. A didática dele é muito boa e dá pra compreender bem os “como e porquês” ele faz as coisas, eu recomendo se você entende inglês.
Eu segui o tutorial dele utilizando a versão do Laravel 8, que é uma versão superior à que ele usa nos vídeos. Essa versão tem algumas diferenças bastante significativas então eu resolvi criar um repositório pra quem quiser ter uma versão do código mais atualizada.
Tentei me manter o mais fiel possível ao tutorial, mudando apenas o que era pertinente entre as versões e o suficiente para seguir em frente. Porém, algumas coisas no meio do percurso que tiveram de ficar bem diferentes do projeto original.
Existe uma parte do tutorial onde é preciso criar o processo de autenticação, para que alguém que utilize o serviço da biblioteca esteja autenticado quando for retirar e devolver livros. Nesta parte, o autor cria esse processo com a antiga ferramenta que era utilizada para este fim, o comando make:auth.
Porém, isso não é mais nativo do Laravel 8 e, mesmo podendo realizar um procedimento semelhante utilizando Laravel/UI, atualmente a documentação do Laravel 8 incentiva a utilizar o Laravel Jetstream, e foi o que eu tentei implementar no projeto.
Mas isso me trouxe umas dores de cabeça.
Primeiro que a solução Jetstream se propõe a facilitar todo esse processo de autenticação e oferece ferramentas interessantes e poderosas pra este fim. E já deixa no projeto várias coisas prontas que dariam dor de cabeça para criar.
Porém, do meu ponto de vista, ela facilita pra quem precisa do que é oferecido, mas dificulta bastante para os marinheiros de primeira viagem no quesito “prática”.
É certo que se você tiver um tempo para ler a documentação pode até entender como tudo funciona… Mas é preciso entender bem o que está fazendo para poder utilizar com alguma eficiência, além de ter tempo para ler um bom pedaço da documentação (ou procurar tutoriais) pra daí sim começar a fazer algo.
O que, na prática, pra quem quer fazer uma aplicação simples, o Jetstream perde feio pra um simples “make:auth” que já te dá uma autenticação básica suficiente para estudos e coisas do gênero.
Ou seja, pra alguns casos, é como usar uma carreta para fazer a mudança de alguns poucos móveis. Digo isso do ponto de vista de usuário das duas soluções. E o seu projeto pode ficar bastante inchado com um monte de features e arquivos que você talvez não use.
E a documentação é ótima em termos de informação e organização mas pouco eficaz para um “Get Start” rápido.
Em suma, é o mesmo problema que eu vejo em todas as documentações “Laravel like”: são documentações excelentes, muito bem escritas, organizadas, e com ótimo conteúdo pra quem já sabe o que está procurando, mas podem virar um labirinto pra quem está iniciando.
Mas enfim, essa é uma conversa controversa que pode ficar pra uma outra hora.
Resumindo: tive de ficar um bom tempo lendo documentação pra entender como que a “solução prática” (como eles mesmo denominam) funciona. O que não foi nada prático.
A segunda coisa é que em um momento eu tive que escolher qual pacote de soluções frontend deveria instalar na aplicação… Então eu dei uma espiada nos títulos dos vídeos mais à frente da playlist de tutoriais pra me guiar na escolha. E um dos títulos diz que haveria uma instalação de VueJS e Tailwind em algum ponto, então achei que seria interessante escolher o pacote do Jetstream com Inertia, pra poder utilizar os componentes do VueJS.
Aliás, só um parênteses aqui: O pacote do Jetstream instala a versão do VueJS 2.5.17 e do Tailwind 1.8. Se quiser usar o Vue e o Tailwind mais novos tem que instalar /atualizar manualmente. Já fica a dica caso alguém precise procurar documentação e etc.
Continuando, quando cheguei no vídeo percebi que o autor nem usa VueJS. Na verdade, ele acaba implementando a solução com Blade mesmo. Talvez ele tenha pensado em utilizar Vue mais pra frente ou apenas instalou por causa do scaffold de autenticação…
Então eu pensei em desinstalar o Inertia pra instalar a solução do Jetstream com Livewire. Me pareceu que faria mais sentido já que não iria usar o Vue diretamente no tutorial, mas poderia utilizar caso precisasse mesmo no Livewire.
Minha dica de amigo: NEM TENTE.
Não existe um comando “uninstall:inertia” (existe apenas o install:inertia). E pronto. Se não gostou, problema seu. Se quiser desfazer o processo é preciso desinstalar os pacotes manualmente e ainda alterar todas as modificações que o pacote fez anteriormente. Pra isso tem uns tutoriais internet afora mas nem se toca nesse assunto na documentação.
Logo, escolha BEM qual desses pacotes vai instalar na sua aplicação pois o processo de voltar atrás é bem doloroso.
Eu sei que nessa parte eu pareço apenas um reclamão que deveria estar agradecido por me darem um ótima solução pronta de graça…
Mas é que quem escreveu a documentação lá no site faz tanta propaganda dessa solução que é até meio chato. Praticamente no capítulo inteiro sobre autenticação tem caixas vermelhas e links sugerindo: use Jetstream, use, USE.
Mas não tem uninstall pra você.
Enfim, só desabafando pra ficar um post divertido.
No fim, acabei implementando a solução de frontend utilizando o Inertia/Vue mesmo. Tentei me manter o mais fiel possível ao tutorial, mantendo as mesmas tags html e css. Mas como eu não quis criar um template com header de autenticação novo, acabei aproveitando o próprio que já vem com o Jetstream Inertia.
Logo, dá pra acessar a página de “Authors” pelo menu de links na direita, assim que entra no dashboard…

E as telinhas ficaram assim:


O registro vai para o banco de dados…

Mas já aviso que tem que colocar a data no formato Y/d/m (é, pois é), ou seja 1999/09/09. Caso contrário, retorna uma exception que não foi prevista no tutorial e eu também ainda não tratei. Sorry xD
Mas pelo menos os testes estão passando direitinho…

E eu ainda fiz umas firulinhas, como colocar o Faker pra popular dados ali nos testes… Já tava ali mesmo. xD
Talvez eu continue o projeto em algum momento no futuro.
Não sei se o autor dos tutoriais irá continuar com a playlist mas eu gostaria de esperar um pouco mais pra ter certeza. Atualmente a playlist está no vídeo 6 e faz um certo tempo que não foi atualizada.
Eu gostaria também de utilizar a abordagem do TDD no frontend, já que no tutorial isso é focado no backend com PHPUnit. Talvez eu use Jest! Vamos ver como vai ser…
Além do mais, eu também estou seguindo outros tutoriais bem bacanudos. Talvez eu poste por aqui logo, logo, contando a minha experiência.
Então é isso. Fica aí o meu repositório pra quem quiser uma versão mais atualizada, queira dar continuidade ou até mesmo queira uma base pra iniciar um projeto com Laravel 8 + Jetstream + Inertia (e Tailwind haha).
Eu estou bastante satisfeito com o tutorial e vou continuar meus estudos. Quero aprender mais sobre testes automatizados. Ainda estou muito leigo nesse assunto mas já começo a perceber o quanto isso é importante.
É isso. Inté. 🙂













