Tests

Published on
Tests

Quanto mais a codebase aumenta, pequenos erros que não esperamos acabam aparecendo, um jeito de previnir isso é escrevendo testes de acordo com que a aplicação cresce.

Porque testar?

Somos humanos e cometemos erros, testes são importantes porque ajuda a encobrir erros e verificar se o seu código esta funcionando da maneira certa, mas o mais importante que testes ajudam seu código continuar funcionando depois que adiciona novas features.

Estrutura de Teste

Seu teste tem que ser curto e ideal para um única coisa

it('given a date in the past, colorForDueDate() returns red', () => { 
    expect(colorForDueDate('2000-10-20')).toBe('red'); 
});
  • Jest oferece o describe uma função que ajuda a estrutura do teste.
  • Usando o describe podemos agrupar diversos testes pertencendo uma funcionalidade.

Testes Unitários

  • Testes unitários cobrem uma pequena parte do código, como por exemplo, funções individuais.
  • A grande beleza dos testes unitários é uma forma rápida de executar e escrever

Mocking

Quando estamos escrevendo sistemas e precisamos que algumas partes interagem com outra os mocks são essenciais para simular tais componentes ou funções integradas.

Usando o mocks para escrever seus testes quer dizer que temos X que para funcionar precisa de A e B, alem dos testes unitários de A e B, precisamos criar alguns dados, funções … fakes para ter o teste integrando os dois.

Testes de componentes

Componentes são responsáveis por renderizar o seu aplicativo, usuários estão diretamente ligado aos componentes.

Components podem falhar tanto em testes unitários quanto de integração, mas porque são partes importantes do core do React Native, que cobrem separadamente.

O que testar em componentes?

→ Integração: quando um usuário clica em um button

→ Renderização: o button esta no lugar certo e do tamanho ou cor certo

Se tem um button que possui um Onpress, precisamos testar tanto a sua aparência quanto a sua funcionalidade, seja ela qual for

Testes interação de usuarios

function GroceryShoppingList() {
	const [groceryItem, setGroceryItem] = useState('');
	const [items, setItems] = useState([]);

	const addNewItemToShoppingList = useCallback(() => {
		setItems([groceryItem, ...items]);
		setGroceryItem('');
	}, [groceryItem, items]);

	return (
		<>
			<TextInput
				value={groceryItem}
				placeholder="Enter grocery item"
				onChangeText={text => setGroceryItem(text)}
			/>

			 <Button
				 title="Add the item to list"
				 onPress={addNewItemToShoppingList}
			/> {items.map(item => (
			<Text key={item}>{item}</Text>
			))}
		</>
	);
}
test('given empty GroceryShoppingList, user can add an item to it', () =>{
	const {getByPlaceholder, getByText, getAllByText} = render(
		<GroceryShoppingList />,
	);

	fireEvent.changeText(
		getByPlaceholder('Enter grocery item'), 'banana',);

		fireEvent.press(getByText('Add the item to list'));

		const bananaElements = getAllByText('banana');
		expect(bananaElements).toHaveLength(1);
		// expect 'banana' to be on the list
});

Quando testamos testes de usuários, devemos nos perguntar, o que esta em essa página? quais alterações esta integrado com ela?

Testes End-to-End

Testes End-to-End verifica se seu aplicativo esta funcionando da maneira certa na perspectivas do usuário.

Objetivo da realização de testes end-to-end é identificar dependências do sistema e garantir que a informação certa seja passada entre vários componentes.

Resumindo, visa provar o sistema de uma forma mais completa simulando o ambiente real