npm package: @ismaelalves/test-gen
Description: Gerador inteligente de testes automáticos para Node.js e TypeScript | JavaScript
Author: Ismael alves
Latest version: 0.1.0

# 📦 TestGen

TestGen é uma biblioteca TypeScript e Javascript voltada para geração automática de testes baseada na estrutura de classes e suas dependências. A seguir está um guia simples e direto para entender e utilizar a biblioteca.

---

## ✨ Objetivo

Simplificar a criação de instâncias para testes sem precisar configurar manualmente mocks e instâncias para cada dependência.

---

## ✨ Visão Geral

- **Linguagem:** TypeScript | Javascript
- **Finalidade:** Geração de testes automáticos com base em metainformações das classes e/ou funções.
- **Entrada:** Arquivos `.ts` ou `.js` contendo classes e/ou funções
- **Saída:** Estruturas de teste baseadas nas dependências das classes ou de funções

---

## ✨ Funcionalidades
- Escaneamento de arquivos através da manipulação de AST (Abstract Syntax Tree)
- Configuração de execução por meio CLI, .TestGenrc, package.json
- Aceitamos analize de arquivos TypeScript | Javascript
- Geração de testes automáticos com base em metainformações das classes e/ou funções.
- Analise de alterações de metodos e/ou funções para geração de novos testes
- Saida de arquivo formatado pelo prettier.js
- Valores de argumentos de metodos e/ou funções gerados randomicamente atraves do chance.js
- Criação de casos de testes para cenários 😇|😈
- Configuração de `it` dos testes por meio de Decorators, Anotações e Comentários

---

## 🚀 Roadmap Futuro

- Suporte para DI frameworks (como Nest.js)
- Integração com IA´s para assertivas mais robustas para cenários 😇|😈 
- Suporte para os motores de teste mocha.js e vitest.js

---

## 🌐 Estrutura do Projeto

```
.
├── bin/                  # Ponto de entrada da CLI
├── examples/             # Exemplos de uso
├── src/                  # Código-fonte principal da biblioteca
│   ├── analyzer/         # Escanea os arquivos por meio de manipulação AST
│   ├── generator/        # Geração de código de teste
│   ├── utils/            # Funções auxiliares
├── types/                # Definição de tipos e interfaces
├── package.json          # Configurações do projeto e dependências
├── tsconfig.json         # Configuração TypeScript
```

---

## 📂 Estrutura dos Arquivos

### `src/analyzer/analyzerCode.ts`
Analisa arquivos TypeScript e Javascript e retorna classes e funções exportadas com seus parâmetros e dependências por meio de anipulação ATS.

### `src/analyzer/fileScanner.ts`
Identifica os arquivos TypeScript e Javascript do projeto.

### `src/generator/testWriter.ts`
Gera strings de construtores para classes, resolvendo dependências automaticamente. Usa cache para não repetir processamento. Escreve o arquivo de test

### `src/generator/mockGenerator.ts.ts`
Retorna valores mockados com base em tipos básicos:

```ts
getMockForType('number') // 0
getMockForType('string') // ""
```

---

## 🔧 Exemplo de Classe

```ts
export class Service {
  constructor(
    private readonly repo: Repository,
    private readonly logger: Logger,
    private readonly count: number
  ) {}
}
```

Geração automática:

```ts
new Service(new Repository(), new Logger(), 0)
```

---

## ⚙️ Instalação

```bash
npm install @ismaelalvesgit/test-gen -D

ou

npm install @ismaelalvesgit/test-gen -g
```

## ✈️ Executando

```bash
npx test-gen

ou

test-gen # Caso tenha optado pela instalação global
```

---

## 🔍 Observações

- A resolução é feita com `Observables` do RxJS.
- Dependências são resolvidas recursivamente com base na árvore de dependências da classe.
- O cache evita reconstruções desnecessárias.
- Ideal para testes automatizados com mockagem de dependências.

---

## ✅ Quando usar?

- Testes automatizados em projetos TypeScript e Javascript.
- Geração dinâmica de instâncias de classes complexas.
- Situações onde você precisa mockar dependências profundamente.

---

## ⚖️ Tecnologias Usadas

- **TypeScript**
- **ts-morph**: manipulação de AST
- **rxjs**: para resolver dependências reativas
- **ts-node**: execução direta de arquivos TypeScript

---

## 🔗 Contribuições

Sinta-se livre para abrir issues ou PRs com melhorias, ideias ou bugs.

---

## 🌟 Autor

Desenvolvido por Ismael alves com amor pela automação de testes.