Inviter GPT avec une suite de tests le fait écrire du code impressionnant
AITDD s'exécute sur BUN, assurez-vous d'installer d'abord la dernière version BUN.
Installez AITDD dans le monde en tant que CLI:
curl -sSL https://raw.githubusercontent.com/di-sukharev/AI-TDD/master/install.sh | bashObtenez votre clé API d'Openai. Assurez-vous d'ajouter des détails de paiement, donc l'API fonctionne.
Définissez la touche sur la configuration AITDD:
aitdd config set OPENAI_API_KEY < your_api_key > Votre clé API est stockée localement dans le fichier de configuration ~/.aitdd/config et n'est stockée nulle part d'une autre manière.
Définissez la commande pour exécuter les tests:
aitdd config set RUN_TESTS " npm run test " Votre clé API est stockée localement dans le fichier de configuration ~/.aitdd/config et n'est stockée nulle part d'une autre manière.
Voici une suite de tests frontend écrits dans la bibliothèque JEST + TEST. Oui, AITDD passe facilement des tests de frontend:
import React from "react" ;
import { rest } from "msw" ;
import { setupServer } from "msw/node" ;
import { render , fireEvent , waitFor , screen } from "@testing-library/react" ;
import "@testing-library/jest-dom" ;
import Fetch from "../fetch" ;
const server = setupServer (
rest . get ( "/greeting" , ( req , res , ctx ) => {
return res ( ctx . json ( { greeting : "hello there" } ) ) ;
} )
) ;
beforeAll ( ( ) => server . listen ( ) ) ;
afterEach ( ( ) => server . resetHandlers ( ) ) ;
afterAll ( ( ) => server . close ( ) ) ;
test ( "loads and displays greeting" , async ( ) => {
render ( < Fetch url = "/greeting" / > ) ;
fireEvent . click ( screen . getByText ( "Load Greeting" ) ) ;
await waitFor ( ( ) => screen . getByRole ( "heading" ) ) ;
expect ( screen . getByRole ( "heading" ) ) . toHaveTextContent ( "hello there" ) ;
expect ( screen . getByRole ( "button" ) ) . toBeDisabled ( ) ;
} ) ;
test ( "handles server error" , async ( ) => {
server . use (
rest . get ( "/greeting" , ( req , res , ctx ) => {
return res ( ctx . status ( 500 ) ) ;
} )
) ;
render ( < Fetch url = "/greeting" / > ) ;
fireEvent . click ( screen . getByText ( "Load Greeting" ) ) ;
await waitFor ( ( ) => screen . getByRole ( "alert" ) ) ;
expect ( screen . getByRole ( "alert" ) ) . toHaveTextContent ( "Oops, failed to fetch!" ) ;
expect ( screen . getByRole ( "button" ) ) . not . toBeDisabled ( ) ;
} ) ;Prêt? Voici le code généré par AITDD (GPT-4) pour réussir le test:
import React , { useState } from "react" ;
function Fetch ( { url } ) {
const [ data , setData ] = useState ( null ) ;
const [ error , setError ] = useState ( null ) ;
const [ loading , setLoading ] = useState ( false ) ;
async function fetchData ( ) {
setLoading ( true ) ;
try {
const response = await fetch ( url ) ;
if ( ! response . ok ) throw new Error ( "Failed to fetch" ) ;
const data = await response . json ( ) ;
setData ( data . greeting ) ;
} catch ( error ) {
setError ( error . message ) ;
} finally {
setLoading ( false ) ;
}
}
return (
< div >
{ data && < h1 role = "heading" > { data } < / h1 > }
{ error && < div role = "alert" > { error } < / div > }
< button onClick = { fetchData } disabled = { loading } >
Load Greeting
< / button >
< / div >
) ;
}
export default Fetch ; Vous pouvez appeler AITDD comme ceci:
aitdd run Vous payez pour vos propres demandes d'Openai API. AITDD utilise le dernier modèle GPT par défaut, vérifiez sa tarification. Les jetons de réponse maximum sont définis sur 2000, vous pouvez l'ajuster via ait config set maxTokens=<number> .
Je n'ai pas pu gérer le modèle Chatgpt pour résoudre le problème. J'ai essayé de le tirer avec un exemple de réponse, il ne comprend pas ce que je veux. Si vous souhaitez essayer de le gérer via le chatppt - testez-le et ouvrez un PR