10000 GitHub - odevbruno/iatest
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

odevbruno/iatest

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Ferramenta para geração de testes automatizados usando IA 🚀

iatest é uma ferramenta de terminal que gera testes automatizados para seu código JavaScript usando OpenAI ou Groq. Basta fornecer um arquivo JavaScript, e o iatest criará um arquivo de teste correspondente, pronto para ser usado com Jest.

Atualmente, o iatest suporta apenas Node.js e gera testes usando o framework Jest. No entanto, nosso objetivo é expandir a ferramenta para suportar mais bibliotecas de teste (como Mocha, Ava, etc.) e outras plataformas (como Python, Java, etc.). Contribuições são bem-vindas! Se você quiser ajudar, confira as orientações no final deste README.


Instalação

Instale o globalmente via npm:

npm install -g iatest

Como Usar

1. Configure suas Chaves de API

Crie um arquivo .env no diretório onde você deseja usar a ferramenta e adicione sua chave da OpenAI ou Groq:

OPENAI_API_KEY=sua_chave_aqui
# OU
GROQ_API_KEY=sua_chave_aqui

Nota: Se você não tem uma chave da OpenAI, crie uma em OpenAI.
Se você não tem uma chave da Groq, crie uma em Groq.

2. Execute a Ferramenta

Use o comando iatest passando o caminho do arquivo JavaScript que deseja testar:

iatest ./caminho/para/seu/arquivo.js

3. Resultado

Um arquivo de teste será gerado no mesmo diretório do arquivo original. Por exemplo, se o arquivo for crud.js, o arquivo de teste será crud.test.js.


Exemplo Prático

Arquivo de Entrada (crud.js)

let dados = []; // Array para armazenar os dados em memória
let proximoId = 1; // Contador para gerar IDs únicos

// Função para criar um novo item
function criar(nome) {
  if (!nome) {
    throw new Error('O nome é obrigatório.');
  }
  const novoItem = { id: proximoId++, nome };
  dados.push(novoItem);
  return novoItem;
}

// Função para ler um item pelo ID
function ler(id) {
  const item = dados.find(item => item.id === id);
  if (!item) {
    throw new Error('Item não encontrado.');
  }
  return item;
}

// Função para atualizar um item pelo ID
function atualizar(id, novosDados) {
  const item = dados.find(item => item.id === id);
  if (!item) {
    throw new Error('Item não encontrado.');
  }

  if (novosDados.nome) {
    item.nome = novosDados.nome;
  }

  return item;
}

// Função para deletar um item pelo ID
function deletar(id) {
  const index = dados.findIndex(item => item.id === id);
  if (index === -1) {
    throw new Error('Item não encontrado.');
  }

  const [itemRemovido] = dados.splice(index, 1);
  return { ...itemRemovido, status: 'deletado' };
}

// Função para listar todos os itens
function listar() {
  return dados;
}

// Função para buscar itens por nome
function buscarPorNome(nome) {
  return dados.filter(item => item.nome.toLowerCase().includes(nome.toLowerCase()));
}

module.exports = { criar, ler, atualizar, deletar, listar, buscarPorNome };

Comando no Terminal

iatest ./src/crud.js

Arquivo de Saída (crud.test.js)

const { criar, ler, atualizar, deletar, listar, buscarPorNome } = require('./crud');
const { describe, it, expect } = require('@jest/globals');

describe('CRUD Operations', () => {
  describe('criar', () => {
    it('deve criar um novo item com um nome válido', () => {
      const item = criar('Item 1');
      expect(item).toHaveProperty('id');
      expect(item.nome).toBe('Item 1');
    });

    it('deve lançar um erro ao criar um item sem nome', () => {
      expect(() => criar('')).toThrow('O nome é obrigatório.');
    });
  });

  describe('ler', () => {
    it('deve retornar um item existente pelo id', () => {
      const itemCriado = criar('Item 2');
      const itemLido = ler(itemCriado.id);
      expect(itemLido).toEqual(itemCriado);
    });

    it('deve lançar um erro ao tentar ler um item não existente', () => {
      expect(() => ler(999)).toThrow('Item não encontrado.');
    });
  });

  describe('atualizar', () => {
    it('deve atualizar um item existente com dados válidos', () => {
      const itemCriado = criar('Item 3');
      const itemAtualizado = atualizar(itemCriado.id, { nome: 'Item 3 Atualizado' });
      expect(itemAtualizado.nome).toBe('Item 3 Atualizado');
    });

    it('deve lançar um erro ao tentar atualizar um item não existente', () => {
      expect(() => atualizar(999, { nome: 'NaoExistente' })).toThrow('Item não encontrado.');
    });
  });

  describe('deletar', () => {
    it('deve deletar um item existente pelo id', () => {
      const itemCriado = criar('Item 4');
      const itemDeletado = deletar(itemCriado.id);
      expect(itemDeletado.status).toBe('deletado');
    });

    it('deve lançar um erro ao tentar deletar um item não existente', () => {
      expect(() => deletar(999)).toThrow('Item não encontrado.');
    });
  });

  describe('listar', () => {
    it('deve listar todos os itens', () => {
      criar('Item 5');
      const lista = listar();
      expect(lista.length).toBeGreaterThan(0);
    });
  });

  describe('buscarPorNome', () => {
    it('deve retornar itens que correspondem ao nome fornecido', () => {
      criar('BuscaTeste');
      const resultados = buscarPorNome('Busca');
      expect(resultados.length).toBeGreaterThan(0);
    });

    it('deve retornar uma lista vazia se nenhum item corresponde ao nome', () => {
      const resultados = buscarPorNome('NaoExistente');
      expect(resultados.length).toBe(0);
    });
  });
});

Expansão Futura e Contribuições

Atualmente, o iatest suporta apenas Node.js e gera testes usando o framework Jest. No entanto, nosso objetivo é expandir a ferramenta para suportar:

  • Mais bibliotecas de teste: Mocha, Ava, Tape, Junit, etc.
  • Mais plataformas: Python, Java, Ruby, etc.

Se você quiser contribuir para o projeto, confira as orientações abaixo na seção Contribuindo. Sua ajuda é muito bem-vinda! 🚀


Contribuindo

Contribuições são bem-vindas! Siga os passos abaixo:

  1. Faça um fork do repositório.
  2. Crie uma branch com sua feature (git checkout -b feature/nova-feature).
  3. Commit suas mudanças (git commit -m 'Adiciona nova feature').
  4. Faça push para a branch (git push origin feature/nova-feature).
  5. Abra um Pull Request.

Licença

Este projeto está licenciado sob a MIT License. Veja o arquivo LICENSE para mais detalhes.


Contato

Se tiver dúvidas, sugestões ou quiser reportar um problema, entre em contato:

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published
0