npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2025 – Pkg Stats / Ryan Hefner

iatest

v1.0.4

Published

Ferramenta de terminal para gerar testes automatizados usando OpenAI.

Readme

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: