quinta-feira, 29 de dezembro de 2022

Teste Unitário - Node



Neste espaço vamos fazer um teste unitário usando Jasmine.


Jasmine é uma estructura de teste de código aberto para JavaScript. Para mais informação de Jasmine aqui o link da documentação https://jasmine.github.io/

Eu me acostumei a ter em uma pasta todos os projetos para deixar eles mais organizados. Mas fica a seu critério, se cria o projeto na área de trabalho em documento, cria onde sinta-se mais cômodo.

No meu computador eu criei uma pasta chamada project, e aí vou criando meu projetos.

Vamos passo a passo a criar um projeto usando node e faremos um teste usando Jasmine.

Bora lá

Passo 1: Abrir GitBash





Passo 2: Abrir o diretório.

O diretório deve estar criado, em caso de não ter uma pasta para armazenar seus projetos, pode criar usando o comando mkdir e o nome de sua preferência. Eu vou usar project.
mkdir project e pressione enter no teclado.


E usaremos o comando cd para entrar nela

cd project e pressione enter.


Ao pressionar enter, o directório vai modificar.


Pronto já estamos no diretório desejado.


Passo 3: Criar o projeto.

Usamos o comando mkdir mais um nome.
mkdir testesNode e pressione enter





Agora vamos a listar o diretório usando o comando ls, para visualizar-o
ls e pressione enter







Passo 4: Abrir o projecto
cd testesNode e pressione enter







Ao pressionar enter, o directório vai modificar




Passo 5: Abrir o editor de texto
code . e pressione enter

Usaremos o Visual Studio  Code (VS Code)








Já aberto vamos para o seguinte passo.


Passo 6: Abrir o terminal interno de VS Code
Clicar em barra de menú terminal


Clicar em novo terminal











Ou usar a combinação de teclas de acesso rápido (Control + Shift + ' )



Abrirá um terminal integrado em nossa janela de VS Code




Clica na setinha





Selecionamos Git Bash para trabalhar 









Passo 7: Inicializar node

npm init -y e pressionamos enter















Este comando vai criar um arquivo package.json

Neste arquivo vamos a mexer depois na seção de test.












Passo 8: Criar um arquivo JavaScript (JS)

touch main.js e pressionamos enter
















Faça assim por linhas de comando  ou pela interface gráfica do programa

Clicar en nuevo arquivo












E escreva o nome do arquivo








main.js e pressione enter






Criarmos uma classe no arquivo JS, o código pode pegar deste link















Passo 9:  Instalar Yasmine
No terminal escrevemos o comando:

npm i jasmine -D e pressionar enter

A flag -D  instala como dependência de desenvolvimento.














Passo 10:  Inicializar Yasmine

npx jasmine init e pressionar enter







Este comando vai criar a parte do spec, onde se vão a conter os teste.








Passo 11:  Criar um arquivo spec.js
main.spec.js e pressione enter
Neste arquivo vamos a criar os teste unitários





sexta-feira, 9 de dezembro de 2022

Depurando o código e deixando ele mais limpo

Eu amo, literalmente amo ajudar à comunidade, até agora tenho experimentado vários bootcamp , e nele eu vou vendo muitos códigos bugeados, em minha vontade de ajudar.

E sabendo que cada programador é uma cabeça e que cada cabeça é um mundo, eu mergulho no novo código, para poder ajudá-l@s a superar o bug e fazer ele correr. Porque de nada adianta tratar de apagar o código dele ou dela e fazer novamente o código a minha imagem e semelhança.

Aí tenho que fazer uma inspeção detalhada de cada linha e entender o que faz esse código.

Particularmente esta semana, em um treinamento, uma equipe tinha um código que corria mas não fazia o que tinha que fazer.

O problema era uma trivia e dependendo da resposta, o programa tinha que falar se a resposta era correta ou incorreta.

Eu me disponibilizo a ajudar.

Abrindo o projeto, inferindo que o possível erro estaria nas decisões (if -else), decidi dar uma olhada a tudo, e no html me deparei com um código muito bagunçado, as modificações que fizemos junt@s, não mudava o que era mostrado em tela, mas deixava o código mais limpo e depois conseguimo@s encontrar o erro nas decisões no arquivo JS.

Aqui o código



Vamos com a identação (é a sangria ou margem)
Se faz com a tecla tab do teclado, e permite indicar que uma sentença o bloco de código está dentro de algo maior.

Aqui a estrutura do HTML, indica que ele tem uma cabeça e um corpo. 

Então devemos deixar a cabeça e o copo dentro do HTML.

Para ver melhor o código, vamos a recolher os blocos (head e body) na seta que está na parte esquerda onde estão os números do código.


Já recolhido 


Temos melhor visualização do documento HTML
Damos um tab, para deixar estas duas tag (<head>...</head> e <body>...</body>) dentro da estrutura do HTML
Apagamos os espaços em branco


Solucionado 



Continuamos

Abrimos novamente as tag, para poder ordenar e limpar o código dentro delas.


Empurramos desde a linha 4 até a 7 para dentro do head, e a 8 na mesma altura do head



Assim indicaremos que esse código está dentro ou pertence ao head

Fazemos o mesmo com o body.


Agora bem, no body na linha 11, temos uma duplicidade de tag <p> e <strong>  para um mesmo texto.



Sabendo que a tag <p> é para criar um texto de tipo parágrafo e <strong> é para texto igual que o parágrafo mas em negrito. Aí elegemos só uma, ter as duas tag, não faz sentido algum. E outra a cotação que eu faço, usa p, que se precisas colocar esse texto em negrito usa no css o bold e vai ter o mesmo resultado.

Vamos a ver


Usamos <strong>


Ou usamos <p>


Mas usar as duas é redundante.

Na linha 13, temos uma tag <p> demais 

Apagamos



Agora estudemos tag <input type="radio">
esta tag é usada para tomar uma única decisão de un grupo de opções, e sua sintaxe é assim:



Aqui temos demais a classe e o id, podemos definir sim, mas no momento é muito cedo para decidir, se vamos a precisar.


O campo do name deve ter um nome significativo e explicativo desse conjunto de opções

Podemos colocar ele como groupOpt1 (para este conjunto de opções), em caso de agregar um novo conjunto de opções podemos usar groupOpt2.

Ficando um código mais limpo:



Se queremos ter uma interação com a resposta do usuário podemos incorporar o EVENTO onclick na tag, ficando assim:



Replicamos esta linhas de código para fazer a opção b e c do botón, e serão do mesmo grupo groupOpt1


Pronta a estrutura semântica do html vamos para o cérebro do código o JavaScript (JS), é ele quem toma as decisões e faz acontecer algumas coisas na execução da aplicação (ganhando interatividade nossa página).

Para isso vamos a usar um botão chamado "Ver resultados" que vai a chamar uma função que está no arquivo JS


Ela deve comparar se a resposta escolhida pelo usuário bate com a resposta correta.

Aí vamos a fazer uma comparação  e apresentar um mensagem na tela que fale correcto ou incorreto, dependendo da selecção do usuário.

Para isso vamos a entender primeiro o código 👀




e tratar de saber porque não faz nada 🙆

Por lógica devemos:
1.- Definir uma função, onde compara-se a resposta escolhida com a  resposta correta. 
2.- Chamar a função.
3.- Mostar um mensagem com "Resposta correta" ou "Resposta incorreta" segundo seja o caso.

Para o primeiro quesito - Definir a função com a comparação



Não temos essa função, vamos a declarar-a.

Declaramos a função por volta desse código, que chamaremos de answer



Damos um tab para identar o código, e dejarlo dentro da função



Para o segundo quesito - Chamar a função

Na linha 22 do HTML


Anexamos o evento onclick do button e chamamos a função

Agregamos um tag <p> para apresentar o menssagem do quesito 3, le definimos uma classe chamada mensagem e deixamos ela vazia (é no javascript que mandamos a escrever nela)




Ficando assim nosso HTML


Para o terceiro quesito - Mostrar "Resposta correta" e "Resposta Incorreta"

Na linha 2 do JS se declara a resposta c como correta



Agora vamos a responder a Trivia




Se selecionamos c dá correta


Se selecionamos a dá correta


E se selecionamos b dá correta 

🤔

Sim, dá correta.

Opaaaaaa....

Então o código tem a condicional mal, analisemos o porque e melhoremos o código para que não fique errado.

O código, está comparando a resposta correta como o valor o valor c.


O código esta comparando resposta correcta que é igual a "c" com "c".

E com "c" é igual a "c".

Será verdadeiro, por isso entra no if e nunca vai entrar no else.

É por isso que escolhemos a opção que escolhemos no nosso programa, vai falar ao usuário que sua resposta está correta.

Porque c é igual a c.

Pensemos um poucoooooooo......

Como solucionar isto 🤔

Falta saber qual é a resposta escolhida pelo usuário, certo?

E como pegamos ela?

Tem um evento no DOM que é o checked (que el devolve a opção seleccionada)


E vamos guardar esse valor em uma variável.


Agora mudemos o if, e em lugar de ter que 


Vamos a comparar se resposta correta é igual à resposta selecionada pelo usuário



Agora temos um bloco de if e else 




Neste código a condicional tem só uma linha de código tanto para o if como para o esle, podemos apagar essas chaves



As chaves são usadas quando tem mais de uma linha, é optativo, mas fica mais limpo seu código 😉

Sem mais palavras bora testar novamente.

Selecionamos a


Agora sim está mostrando que é uma resposta incorreta

Porque ele pega na variável respostaCorreta o valor de C e o compara como o valor da variavel respostaDoUsuraio que é a


E como "c" não é igual "a", é falso, por isso entra no else mostrando o menssagem que a resposta é incorreta 

E com b



E com c



Já está um código funcional e menos sujo do que estava rsrsrs 👻

Já você tentou pegar o código bugado de outra pessoa e consegue fazer ele correr.

Faça é uma experiência gratificante ajudar ao outro a sair do bug e continue, e outro factor que suma a você uma experiência nova de entendimento, com certeza vai fazer explodir sua cabeça rsrsrs

Nadi Duno - DevRel
Frontend | JavaScript
https://www.linkedin.com/in/nadiduno/

Link do código: https://replit.com/@NadiDuno/TriviaWandinhaJs#index.html

Como Criar um Pull Request (PR) no GitHub

  Como Criar um Pull Request (PR) no GitHub Um Pull Request (PR) é um recurso essencial no GitHub que permite propor mudanças em um repositó...