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.
Instale o globalmente via npm:
npm install -g iatest
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.
Use o comando iatest
passando o caminho do arquivo JavaScript que deseja testar:
iatest ./caminho/para/seu/arquivo.js
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
.
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 };
iatest ./src/crud.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);
});
});
});
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! 🚀
Contribuições são bem-vindas! Siga os passos abaixo:
- Faça um fork do repositório.
- Crie uma branch com sua feature (
git checkout -b feature/nova-feature
). - Commit suas mudanças (
git commit -m 'Adiciona nova feature'
). - Faça push para a branch (
git push origin feature/nova-feature
). - Abra um Pull Request.
Este projeto está licenciado sob a MIT License. Veja o arquivo LICENSE para mais detalhes.
Se tiver dúvidas, sugestões ou quiser reportar um problema, entre em contato:
- Email: bruno.contatododev@gmail.com
- GitHub: odevbruno