UNPKG

iatest

Version:

Ferramenta de terminal para gerar testes automatizados usando OpenAI.

104 lines (84 loc) 3.07 kB
#!/usr/bin/env node const { version } = require("../package.json"); // Se o argumento for "--version", exibe a versão e encerra if (process.argv.includes("--version")) { console.log(version); process.exit(0); } require("dotenv").config(); const fs = require('fs'); const path = require('path'); const { OpenAI } = require('openai'); const { Groq } = require('groq-sdk'); let instance; let using = "groq"; if (process.env['GROQ_API_KEY']) { instance = new Groq({ apiKey: process.env['GROQ_API_KEY'] }) } else { using = "openai" instance = new OpenAI({ apiKey: process.env['OPEN_AI_KEY'] }); } console.log(`Iniciando a geração dos testes usando ${using}`); const ia = instance; function extract(json) { const regex = /```javascript([\s\S]*?)```/; const match = json.match(regex); if (match && match[1]) { return match[1].trim(); } return json; } // Função para gerar testes com IA async function generateTest(code, docPath) { const prompt = `Você é um especialista em Node.js e testes automatizados (PT/BR). Gere testes automatizados para o seguinte código usando Jest. Siga estas instruções **à risca**: 1. Use \`require\` para importar os métodos do código e do \`@jest/globals\`. 2. Certifique-se de importar corretamente os métodos do \`@jest/globals\` (describe, it, expect, TODOS OS METODOS QUE PRECISAREM PARA OS TESTES). 3. O caminho para importar os métodos do código deve ser \`${docPath}\`. 4. Forneça **apenas o código dos testes**, sem explicações ou comentários adicionais. 5. Mantenha o foco em cobrir todos os cenários possíveis (casos de sucesso e erro) para garantir a robustez dos testes. Aqui está o código que deve ser testado: \`\`\`javascript ${code} \`\`\``.trim(); try { const chatCompletion = await ia.chat.completions.create({ messages: [{ role: 'system', content: prompt }], model: using === "openai" ? 'gpt-4o' : "llama3-70b-8192" }); const content = chatCompletion.choices[0]?.message.content; return content.trim(); } catch (error) { console.error(`❌ Erro ao gerar testes: ${JSON.stringify(error)}`); return null; } } // Função principal async function main() { const docPath = process.argv[2]; if (!docPath) { console.warn('Por favor, forneça o caminho do arquivo JavaScript.'); console.warn('Exemplo: iatest ./caminho/para/arquivo.js'); process.exit(1); } const absolutPath = path.resolve(docPath); if (!fs.existsSync(absolutPath)) { console.error(`Arquivo não encontrado: ${absolutPath}`); process.exit(1); } const code = fs.readFileSync(absolutPath, 'utf-8'); const codeTest = await generateTest(code, docPath); if (!codeTest) { console.error('Não foi possível gerar testes.'); process.exit(1); } const testPath = path.join( path.dirname(absolutPath), `${path.basename(absolutPath, '.js')}.test.js` ); fs.writeFileSync(testPath, extract(codeTest),); console.log("✅ O teste automatizado foi gerado com sucesso !"); } main();