Para realizar o projeto, atente-se a cada passo descrito a seguir, e se tiver qualquer dúvida, nos envie por Slack! #vqv 🚀
Aqui você vai encontrar os detalhes de como estruturar o desenvolvimento do seu projeto a partir deste repositório, utilizando uma branch específica e um Pull Request para colocar seus códigos.
Ao iniciar este projeto, você concorda com as diretrizes do Código de Conduta e do Manual da Pessoa Estudante da Trybe.
🤷🏽♀️ Como entregar
Para entregar o seu projeto você deverá criar um Pull Request neste repositório.
Lembre-se que você pode consultar nosso conteúdo sobre Git & GitHub e nosso Blog - Git & GitHub sempre que precisar!
👨💻 O que deverá ser desenvolvido
Neste projeto você desenvolverá um modelo do sistema solar! Ao utilizar essa aplicação, uma pessoa usuária deverá ser capaz de:
* Visualizar todos os planetas do sistema solar renderizados na tela;
* Visualizar todas as cartas com informações sobre missões espaciais;
Ao final deste projeto, sua aplicação deverá ser algo semelhante a essa imagem.
Caso queira utilizar a mesma imagem de fundo apresentada no figma, ela está sendo disponibilizada dentro da pasta src/images.
Lembre-se, todos os projetos que você desenvolve aqui na Trybe fazem parte do seu portfólio como pessoa desenvolvedora. Aproveite para testar suas habilidades aqui também!
📝 Habilidades
Neste projeto, verificaremos se você é capaz de:
-
Utilizar JSX no React;
-
Utilizar corretamente o método
render()para renderizar seus componentes; -
Utilizar
importpara trazer componentes em diferentes arquivos; -
Criar componentes de classe em React;
-
Criar múltiplos componentes a partir de um array;
-
Fazer uso de
propscorretamente; -
Fazer uso de
PropTypespara validar asprops de um componente.
🗓 Data de Entrega
- Este projeto é individual;
- São
1dias de projeto; - Data para entrega final do projeto:
27/07/2022 14:00.
‼️ Antes de começar a desenvolver
- Clone o repositório
- Use o comando:
git clone git@github.com:tryber/sd-023-a-project-solar-system.git. - Entre na pasta do repositório que você acabou de clonar:
cd sd-023-a-project-solar-system
- Instale as dependências
npm install.
- Crie uma branch a partir da branch
master
- Verifique que você está na branch
master- Exemplo:
git branch
- Exemplo:
- Se não estiver, mude para a branch
master- Exemplo:
git checkout master
- Exemplo:
- Agora crie uma branch à qual você vai submeter os
commitsdo seu projeto- Você deve criar uma branch no seguinte formato:
nome-de-usuario-nome-do-projeto - Exemplo:
git checkout -b joaozinho-sd-023-a-project-solar-system>
- Você deve criar uma branch no seguinte formato:
- Adicione as mudanças ao stage do Git e faça um
commit
- Verifique que as mudanças ainda não estão no stage
- Exemplo:
git status(deve aparecer listada a pasta joaozinho em vermelho)
- Exemplo:
- Adicione o novo arquivo ao stage do Git
- Exemplo:
git add .(adicionando todas as mudanças - que estavam em vermelho - ao stage do Git)git status(deve aparecer listado o arquivo joaozinho/README.md em verde)
- Exemplo:
- Faça o
commitinicial- Exemplo:
git commit -m 'iniciando o projeto x'(fazendo o primeiro commit)git status(deve aparecer uma mensagem tipo nothing to commit )
- Exemplo:
- Adicione a sua branch com o novo
commitao repositório remoto
- Usando o exemplo anterior:
git push -u origin joaozinho-sd-023-a-project-solar-system
- Crie um novo
Pull Request(PR)
- Vá até a página de Pull Requests do repositório no GitHub
- Clique no botão verde "New pull request"
- Clique na caixa de seleção "Compare" e escolha a sua branch com atenção
- Coloque um título para a sua Pull Request
- Exemplo: "Cria tela de busca"
- Clique no botão verde "Create pull request"
- Adicione uma descrição para o Pull Request e clique no botão verde "Create pull request"
- Não se preocupe em preencher mais nada por enquanto!
- Volte até a página de Pull Requests do repositório e confira que o seu Pull Request está criado
⌨️ Durante o desenvolvimento
-
Faça
commitsdas alterações que você fizer no código regularmente -
Lembre-se de sempre após um (ou alguns)
commitsatualizar o repositório remoto -
Os comandos que você utilizará com mais frequência são:
git status(para verificar o que está em vermelho - fora do stage - e o que está em verde - no stage)git add(para adicionar arquivos ao stage do Git)git commit(para criar um commit com os arquivos que estão no stage do Git)git push -u origin nome-da-branch(para enviar o commit para o repositório remoto na primeira vez que fizer opushde uma nova branch)git push(para enviar o commit para o repositório remoto após o passo anterior)
🤝 Depois de terminar o desenvolvimento (opcional)
Para sinalizar que o seu projeto está pronto para o "Code Review", faça o seguinte:
-
Vá até a página DO SEU Pull Request, adicione a label de "code-review" e marque seus colegas:
-
No menu à direita, clique no link "Labels" e escolha a label code-review;
-
No menu à direita, clique no link "Assignees" e escolha o seu usuário;
-
No menu à direita, clique no link "Reviewers" e digite
students, selecione o timetryber/students-sd-023-a.
-
Caso tenha alguma dúvida, aqui tem um video explicativo.
🕵🏿 Revisando um pull request
Use o conteúdo sobre Code Review para te ajudar a revisar os Pull Requests.
🎛 Linter
Usaremos o ESLint e o StyleLint para fazer a análise estática do seu código.
Este projeto já vem com as dependências relacionadas ao linter configuradas no arquivo package.json.
Para poder rodar o linter em um projeto basta executar o comando npm install dentro do projeto e depois npm run lint para executar o ESLint, ou npm run lint:styles para executar o StyleLint. Se a análise do linter encontrar problemas no seu código, tais problemas serão mostrados no seu terminal. Se não houver problema no seu código, nada será impresso no seu terminal.
Você pode também instalar o plugin do ESLint no VSCode. Para isso, basta fazer o download do plugin ESLint e instalá-lo.
Em caso de dúvidas, confira o material do course sobre ESLint e Stylelint.
🛠 Testes
Vamos utilizar React Testing Library para execução dos testes.
Esse framework de testes utiliza algumas marcações no código para verificar a solução proposta, uma dessas marcações é o atributo data-testid e faremos uso dele aqui.
Na descrição dos requisitos do projeto será pedido que seja feita a adição de atributos data-testid nos elementos HTML. Veja o exemplo abaixo para deixar mais nítido como usar esse requisito:
Se o requisito pedir "crie um botão e adicione o id de teste (ou data-testid) com o valor my-action, você pode criar:
<button data-testid="my-action"></button>ou
<a data-testid="my-action"></a>Ou seja, o atributo data-testid="my-action" servirá para o React Testing Library(RTL) identificar o elemento. Dessa forma, conseguiremos realizar testes focados no comportamento da aplicação.
Em alguns requisitos, utilizamos o getByRole para poder selecionar os elementos de forma semântica. Portanto, atente-se às instruções de cada requisito. Por exemplo, se o requisito pedir explicitamente um button, você deverá utilizar exatamente esse elemento.
Para verificar a solução proposta, você pode executar todos os testes localmente, basta executar:
npm testEspecialmente no início, quando a maioria dos testes está falhando, a saída após executar os testes é extensa. Você pode desabilitar temporariamente um teste utilizando a função .skip junto à função it. Como o nome indica, esta função "pula" um teste:
it.skip('Será validado se o componente `<Title />` contém uma tag `h2`', () => {
render(<Title headline={headlineText} />);
const headline = screen.getByRole('heading', { level: 2 });
expect(headline).toBeInTheDocument();
});Uma outra forma para contornar esse problema é a utilização da função .only após o it. Com isso, será possível que apenas um requisito rode localmente e seja avaliado.
it.only('Será validado se o componente `<Title />` contém uma tag `h2`', () => {
render(<Title headline={headlineText} />);
const headline = screen.getByRole('heading', { level: 2 });
expect(headline).toBeInTheDocument();
});Você também pode rodar apenas um arquivo de teste, por exemplo:
npm test 03.Title.test.jsou
npm test 03.Title🏪 Desenvolvimento
Você deve desenvolver uma aplicação em React com criação de componentes de classe e passagem de props. Essa aplicação simulará uma visualização do Sistema Solar, bem como informações sobre diversas missões espacias que ocorreram ao longo da história.
As imagens dos planetas e as informações das missões são fornecidas no projeto. Você terá que desenvolver os componentes necessários para exibí-las na tela, conforme o descrito nos requisitos.
🗣 Nos dê feedbacks sobre o projeto!
Ao finalizar e submeter o projeto, não se esqueça de avaliar sua experiência preenchendo o formulário. Leva menos de 3 minutos!
🗂 Compartilhe seu portfólio!
Você sabia que o LinkedIn é a principal rede social profissional e compartilhar o seu aprendizado lá é muito importante para quem deseja construir uma carreira de sucesso? Compartilhe esse projeto no seu LinkedIn, marque o perfil da Trybe (@trybe) e mostre para a sua rede toda a sua evolução.
Crie um componente chamado Header dentro da pasta src/components. Este componente irá renderizar o título principal da página.
-
Ele deve conter uma tag
headere, dentro dela, uma tagh1. O texto da tagh1deve ser "Sistema Solar"; -
Renderize o componente
Headerdentro do componente principalApp.
O que será verificado
-
Será validado se o componente
<Header />é renderizado; -
Será validado se o componente
<Header />contém uma tagheader; -
Será validado se o componente
<Header />contém uma tagh1; -
Será validado se o componente
<Header />renderiza corretamente o texto "Sistema Solar"; -
Será validado se o componente
<Header />está sendo renderizado no componente principalApp.
Crie um componente chamado SolarSystem dentro da pasta src/components.
-
O componente
SolarSystemdeve ter umadivque envolva todo seu conteúdo e que tenha o atributodata-testid="solar-system"; -
Renderize o componente
SolarSystemabaixo doHeader, dentro do componente principalApp.
O que será verificado
-
Será validado se o componente
<SolarSystem />é renderizado; -
Será validado se existe uma
divque possui odata-testid="solar-system"; -
Será validado se o componente
<SolarSystem />está sendo renderizado no componente principalApp.
Crie um componente chamado Title dentro da pasta src/components.
-
O componente
Titledeve receber uma propheadline; -
Ele deve conter uma tag
h2, que deve renderizar o texto recebido pela propheadline.
O que será verificado
-
Será validado se o componente
<Title />é renderizado; -
Será validado se o componente
<Title />contém uma tagh2; -
Será validado se o componente
<Title />renderiza o texto passado pela propheadlinedentro de uma tagh2.
Renderize o componente Title dentro do componente SolarSystem.
- O componente
Titledeve ser renderizado recebendo a propheadlinecom o valor "Planetas".
O que será verificado
- Será validado se o texto "Planetas" é renderizado usando o componente
Titledentro do componenteSolarSystem.
Crie um componente chamado PlanetCard dentro da pasta src/components.
-
O componente
PlanetCarddeve receber duas props: uma chamadaplanetNamee outra chamadaplanetImage; -
O componente
PlanetCarddeve ter umadivque envolva todo seu conteúdo e que tenha o atributodata-testid="planet-card"; -
O componente
PlanetCarddeve renderizar o texto recebido pela propplanetName. Sugerimos a utilização de tags de Conteúdo de Fluxo, como<p>, que deve conter o atributodata-testid="planet-name"; -
O componente
PlanetCarddeve renderizar uma imagem que tenha o atributosrccom o valor recebido pela propplanetImage; -
Além do atributo
src, a imagem renderizada deve ter o atributoaltcom o textoPlaneta {planetName}, onde{planetName}é o valor recebido pela propplanetName.
O que será verificado
-
Será validado se o componente
<PlanetCard />é renderizado; -
Será validado se o componente
<PlanetCard />possui uma div com o atributodata-testid="planet-card"; -
Será validado se é renderizado o texto recebido pela prop
planetName; -
Será validado se é renderizada uma imagem com o atributo
srccom o mesmo valor recebido pela propplanetImage; -
Será validado se, além do atributo
src, a imagem renderizada possui o atributoaltcom o textoPlaneta {planetName}, onde{planetName}é o valor recebido pela propplanetName.
Renderize uma lista com os planetas do Sistema Solar dentro do componente SolarSystem.
-
Utilize o componente
PlanetCardpara renderizar cada item da lista de planetas; -
Você encontrará a lista com os nomes e as imagens de cada planeta do Sistema Solar no arquivo
src/data/planets.js; -
Você deve importar a lista no componente
SolarSystemusando o código:
import planets from '../data/planets';- A lista de planetas é um array de objetos no seguinte formato:
{
name: "Nome do planeta",
image: "caminho-para-imagem-do-planeta"
}- Para cada planeta da lista, você deverá renderizar um componente
PlanetCard, passando o atributonamepara a propplanetNamee o atributoimagepara a propplanetImage.
💡 Dica:
- Lembre-se do método que te permite criar vários componentes iguais a partir dos valores presentes em um array. Lembre-se que ao renderizar uma lista, você deve passar o atributo
keypara cada item. Você pode usar o nome do planeta comokey.
O que será verificado
-
Será verificado se é renderizado um componente
<PlanetCard />para cada planeta da lista de planetas; -
Será verificado se todos os planetas do Sistema Solar estão sendo listados na tela.
Crie um componente chamado Missions dentro da pasta src/components.
-
Este componente deve ter uma
divque envolva todo seu conteúdo e que tenha o atributodata-testid="missions"; -
Renderize o componente
Missionsabaixo doSolarSystem, dentro do componente principalApp.
O que será verificado
-
Será validado se o componente
<Missions />é renderizado; -
Será validado se existe uma
divque possui odata-testid="missions"; -
Será validado se o componente
<Missions />está sendo renderizado no componente principalApp.
Renderize o componente Title dentro do componente Missions.
- O componente
Titledeve ser renderizado recebendo a propheadlinecom o valor "Missões".
O que será verificado
- Será validado se o texto "Missões" é renderizado usando o componente
Titledentro do componenteMissions.
Crie um componente chamado MissionCard dentro da pasta src/components.
-
O componente
MissionCarddeve receber quatro props:nameyearcountrydestination
-
O componente
MissionCarddeve ter umadivque envolva todo seu conteúdo e que tenha o atributodata-testid="mission-card"; -
O componente
MissionCarddeve renderizar o texto recebido pela propname. Sugerimos a utilização de tags de Conteúdo de Fluxo, como<p>, que deve conter o atributodata-testid="mission-name"; -
O componente
MissionCarddeve renderizar o texto recebido pela propyear. Sugerimos a utilização de tags de Conteúdo de Fluxo, como<p>, que deve conter o atributodata-testid="mission-year"; -
O componente
MissionCarddeve renderizar o texto recebido pela propcountry. Sugerimos a utilização de tags de Conteúdo de Fluxo, como<p>, que deve conter o atributodata-testid="mission-country"; -
O componente
MissionCarddeve renderizar o texto recebido pela propdestination. Sugerimos a utilização de tags de Conteúdo de Fluxo, como<p>, que deve conter o atributodata-testid="mission-destination".
O que será verificado
-
Será validado se o componente
<MissionCard />é renderizado; -
Será validado se o componente
<MissionCard />possui uma div com o atributodata-testid="mission-card"; -
Será validado se é renderizado o texto recebido pela prop
name; -
Será validado se é renderizado o texto recebido pela prop
year; -
Será validado se é renderizado o texto recebido pela prop
country; -
Será validado se é renderizado o texto recebido pela prop
destination.
Renderize uma lista com as missões espaciais dentro do componente Missions.
-
Utilize o componente
MissionCardpara renderizar cada item da lista de missões; -
Você encontrará a lista com as informações de cada missão espacial no arquivo
src/data/missions.js; -
Você deve importar a lista no componente
Missionsusando o código:
import missions from '../data/missions';- A lista de missões espaciais é um array de objetos no seguinte formato:
{
name: 'Nome da missão',
year: 'Ano de lançamento da missão',
country: 'País que lançou a missão',
destination: 'Destino da missão',
}- Para cada missão espacial da lista, você deverá renderizar um componente
MissionCard, passando cada atributo para sua respectiva prop.
💡 Dica:
- Lembre-se do método que te permite criar vários componentes iguais a partir dos valores presentes em um array. Lembre-se que ao renderizar uma lista, você deve passar o atributo
keypara cada item. Você pode usar o nome da missão comokey.
O que será verificado
-
Será verificado se é renderizado um componente
<MissionCard />para cada missão espacial da lista de missões; -
Será verificado se todas as missões espaciais estão sendo listadas na tela.






