2
respostas

[Dúvida] React Native: COMO TESTAR METODOS DENTRO DE FUNCOES

Olá boa tarde queria saber como testar funcoes que estao dentro de outras funcoes no caso de uma tela React native

Exemplo de uma tela com outras funcoes dentro

import React from 'react';
import { View, Text } from 'react-native';

export default function Contato() {

    function getContacts(){
        return 'listar contatos';
    }

    function novoContato(){
        return 'cadastrando novo contato';
    }

    return (
        <View>
            <Text>Hello</Text>
        </View>
    )

}

Pra chamar a função getContacts dentro de um arquivo de testes exemplo contato.test.tsx

Exemplo:

describe('Testando a funcao "getContacts" dentro da tela  Contato e se retorna dados', () => {

    **Nao da pra chamar assim**
    Contato.novoContato();

    **Como que ficaria essa chamada ? desse metodo pra testar ?**


});
2 respostas

Poxa ninguem responde.

Olá Matheus Lima, tudo bem?

Existem várias maneiras de fazer isso. A primeira, para testar a função getContacts dentro da tela Contato, você pode exportá-la como uma função independente, assim poderá chamá-la diretamente.

Primeiro, exporte a função getContacts diretamente:

import React from 'react';
import { View, Text } from 'react-native';

export function getContacts() {
    return 'listar contatos';
}

export default function Contato() {
    function novoContato(){
        return 'cadastrando novo contato';
    }

    return (
        <View>
            <Text>Hello</Text>
        </View>
    )
}

Em seguida, você pode chamar a função getContacts diretamente no seu arquivo de testes:

import { getContacts } from './Contato';

describe('Testando a funcao "getContacts" dentro da tela  Contato e se retorna dados', () => {
    it('deve retornar "listar contatos"', () => {
        expect(getContacts()).toEqual('listar contatos');
    });
});

A segunda forma, se você não pode exportar a função getContacts diretamente, pode criar uma forma de acessá-la a partir do componente Contato, transformando ele em uma classe.

Uma forma de fazer isso é atribuir a função getContacts a um método de instância do componente. Dessa forma, você pode acessar a função a partir da instância do componente, assim como qualquer outro método de instância:

import React from 'react';
import { View, Text } from 'react-native';

export default class Contato extends React.Component {
    getContacts() {
        return 'listar contatos';
    }

    novoContato() {
        return 'cadastrando novo contato';
    }

    render() {
        return (
            <View>
                <Text>Hello</Text>
            </View>
        )
    }
}

Em seguida, no seu arquivo de testes, você pode criar uma instância do componente Contato e acessar o método getContacts a partir da instância:

import Contato from './Contato';

describe('Testando a funcao "getContacts" dentro da tela  Contato e se retorna dados', () => {
    it('deve retornar "listar contatos"', () => {
        const contato = new Contato();
        expect(contato.getContacts()).toEqual('listar contatos');
    });
});

Uma terceira maneira, se você precisa continuar usando uma função Contato como função, uma forma de acessar o método getContacts é atribuir a função a uma propriedade do componente. Dessa forma, você pode acessar a função a partir da propriedade do componente, assim como qualquer outra propriedade:

import React from 'react';
import { View, Text } from 'react-native';

export default function Contato() {
    function getContacts() {
        return 'listar contatos';
    }

    function novoContato() {
        return 'cadastrando novo contato';
    }

    return {
        getContacts,
        novoContato,
        render: () => (
            <View>
                <Text>Hello</Text>
            </View>
        )
    }
}

Em seguida, no seu arquivo de testes, você pode acessar as funções getContacts e novoContato diretamente da propriedade do componente:

import Contato from './Contato';

describe('Testando a funcao "getContacts" dentro da tela  Contato e se retorna dados', () => {
  it('deve retornar "listar contatos"', () => {
    const contato = Contato();
    const { getContacts } = contato;
    const result = getContacts();

    expect(result).toEqual('listar contatos');
  });
});

Lembrando que todos os testes foram feitos usando a biblioteca Jest.

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!