Automatisez la génération, mise à jour et exécution de tests Rails avec l'Intelligence Artificielle
autotest-ia
est un gem innovant qui révolutionne l'écriture de tests dans vos applications Rails en exploitant la puissance de l'IA pour générer automatiquement des tests pertinents, maintenir la couverture de code et améliorer la qualité de vos projets.
- 🔥 Génération automatique de tests : L'IA analyse votre code et génère des tests RSpec/Minitest intelligents
- 🔍 Surveillance en temps réel : Détecte automatiquement les changements de fichiers et génère les tests correspondants
- 🧠 Context métier intelligent : Interface interactive pour enrichir le contexte métier et générer des tests plus pertinents
- 📊 Rapports détaillés : Analyse de couverture, qualité du code, tendances et suggestions d'amélioration
- ⚡ Exécution automatique : Lance les tests après génération avec feedback immédiat
- 🔧 Configuration flexible : Support OpenAI, Ollama, personnalisation des prompts et frameworks
- 🎯 Interface CLI moderne : Commandes intuitives avec mode interactif complet
Ce projet a été développé au Sénégal 🇸🇳 avec pour mission d'améliorer la productivité des développeurs Ruby/Rails en automatisant l'écriture de tests grâce à l'intelligence artificielle.
Auteur : Mohamed Camara GUEYE - Développeur passionné basé au Sénégal
Vision : Démocratiser l'utilisation de l'IA dans le développement logiciel pour la communauté africaine
Ajoutez cette ligne au Gemfile
de votre application :
gem 'autotest-ia'
Puis exécutez :
$ bundle install
Ou installez directement :
$ gem install autotest-ia
$ autotest-ia init
Cette commande :
- Détecte ou configure RSpec/Minitest
- Crée le fichier de configuration
.autotest_ia.yml
- Configure les chemins de surveillance par défaut
- Vérifie la compatibilité du projet
export OPENAI_API_KEY="votre-clé-openai"
autotest-ia init --provider openai --model gpt-4
# Démarrez Ollama localement
ollama serve
# Configurez autotest-ia
autotest-ia init --provider ollama --model codellama
Le fichier .autotest_ia.yml
permet de personnaliser le comportement :
# Configuration autotest-ia
ai_provider: openai
ai_model: gpt-3.5-turbo
interactive_mode: true
auto_run_tests: true
coverage_threshold: 80
# Chemins à surveiller
watch_paths:
- app/models
- app/controllers
- app/jobs
- app/services
- app/helpers
- app/mailers
- lib
# Chemins à exclure
exclude_paths:
- tmp
- log
- vendor
- node_modules
- .git
Lancez la surveillance intelligente de vos fichiers :
$ autotest-ia watch
Dès qu'un fichier est modifié, autotest-ia
:
- 🔍 Détecte le changement
- 🧠 Analyse le code avec l'IA
- 📝 Génère ou met à jour le test correspondant
- 🧪 Exécute les tests automatiquement
- 📊 Affiche les résultats et suggestions
Pour un fichier spécifique :
# Génération simple
$ autotest-ia generate app/models/user.rb
# Avec contexte métier
$ autotest-ia generate app/models/user.rb --context "Modèle utilisateur avec authentification OAuth"
# Mode interactif (recommandé)
$ autotest-ia generate app/models/user.rb --interactive
Le mode interactif vous guide pour :
- Préciser le rôle métier du composant
- Définir les règles spécifiques à tester
- Identifier les cas limites importants
- Spécifier les contraintes techniques
# Exécuter tous les tests
$ autotest-ia test
# Tests spécifiques
$ autotest-ia test spec/models/user_spec.rb
# Mode surveillance des tests
$ autotest-ia test --watch
# Avec analyse détaillée
$ autotest-ia test --coverage
# Rapport complet HTML
$ autotest-ia report full
# Analyse de couverture
$ autotest-ia report coverage
# Métriques de qualité
$ autotest-ia report quality
# Tendances (7 derniers jours)
$ autotest-ia report trend --days 7
# Améliorer un test existant
$ autotest-ia improve spec/models/user_spec.rb app/models/user.rb
# Avec notes spécifiques
$ autotest-ia improve spec/models/user_spec.rb app/models/user.rb --notes "Ajouter tests pour la validation email"
Pour une expérience guidée :
$ autotest-ia interactive
Commande | Description | Options principales |
---|---|---|
init |
Initialise le projet | --provider , --model , --interactive |
watch [PATH] |
Surveille les fichiers | --interactive , --auto-run |
generate FILE |
Génère un test | --context , --interactive , --output |
test [FILES] |
Exécute les tests | --coverage , --watch |
report [TYPE] |
Génère un rapport | --output , --days |
improve TEST SOURCE |
Améliore un test | --notes |
config |
Affiche la configuration | - |
interactive |
Mode interactif | - |
version |
Affiche la version | - |
Fichier : app/models/user.rb
class User < ApplicationRecord
validates :email, presence: true, uniqueness: true
has_many :posts, dependent: :destroy
def full_name
"#{first_name} #{last_name}".strip
end
end
Test généré : spec/models/user_spec.rb
# frozen_string_literal: true
require 'rails_helper'
RSpec.describe User, type: :model do
describe 'validations' do
it { should validate_presence_of(:email) }
it { should validate_uniqueness_of(:email) }
end
describe 'associations' do
it { should have_many(:posts).dependent(:destroy) }
end
describe '#full_name' do
let(:user) { build(:user, first_name: 'John', last_name: 'Doe') }
it 'returns the full name' do
expect(user.full_name).to eq('John Doe')
end
context 'when first_name is blank' do
let(:user) { build(:user, first_name: '', last_name: 'Doe') }
it 'returns only last_name' do
expect(user.full_name).to eq('Doe')
end
end
end
end
Fichier : app/controllers/api/v1/users_controller.rb
Test généré automatiquement avec :
- Tests CRUD complets
- Gestion des erreurs
- Formats JSON
- Authentification
- Paramètres autorisés
Fichier : app/services/payment_processor.rb
Test généré avec :
- Tests des méthodes publiques
- Mocking des APIs externes
- Gestion d'erreurs métier
- Cas limites de paiement
lib/autotest/ia/
├── configuration.rb # Configuration globale
├── file_watcher.rb # Surveillance des fichiers
├── ai_generator.rb # Génération IA avec langchain.rb
├── test_runner.rb # Exécution des tests
├── reporter.rb # Rapports et analyses
└── cli.rb # Interface ligne de commande
- Langchain.rb : Interface unifiée pour les LLMs
- Listen : Surveillance efficace des fichiers
- Thor : CLI moderne et extensible
- TTY::Prompt : Interface interactive intuitive
- SimpleCov : Analyse de couverture de code
- OpenAI : GPT-3.5, GPT-4 (recommandé pour la qualité)
- Ollama : Models locaux (Code Llama, etc.)
- Extensible : Architecture prête pour d'autres providers
- Utilisez GPT-4 pour la meilleure qualité de tests
- Activez le mode interactif pour un contexte métier riche
- Configurez un seuil de couverture approprié (80%+)
- Personnalisez les chemins selon votre architecture
- Initialisation :
autotest-ia init
- Configuration : Personnalisez
.autotest_ia.yml
- Surveillance :
autotest-ia watch
en arrière-plan - Développement : Codez normalement, les tests se génèrent automatiquement
- Validation : Révisez et ajustez les tests générés
- Rapports : Analysez régulièrement avec
autotest-ia report
Enrichissez le contexte métier pour des tests plus pertinents :
# Exemple avec contexte riche
autotest-ia generate app/models/order.rb --context "
Modèle de commande e-commerce avec :
- Statuts : pending, confirmed, shipped, delivered, cancelled
- Calcul automatique des taxes selon la localisation
- Intégration Stripe pour les paiements
- Notifications email automatiques
- Gestion des stocks en temps réel
"
Erreur de clé API manquante
export OPENAI_API_KEY="sk-..."
autotest-ia config # Vérifiez la configuration
Tests non générés
# Vérifiez les chemins surveillés
autotest-ia config
# Mode debug
autotest-ia generate app/models/user.rb --interactive
Couverture insuffisante
# Analysez les fichiers non couverts
autotest-ia report coverage
# Générez les tests manquants
autotest-ia generate app/models/uncovered_model.rb
Les logs détaillés sont disponibles dans tmp/autotest_ia.log
Les contributions sont les bienvenues ! Pour contribuer :
- Lisez le Guide de Contribution 📚
- Choisissez le type de contribution :
- 🐛 Signaler un bug
- ✨ Proposer une fonctionnalité
- 📚 Améliorer la documentation
- 🔧 Contribuer au code
- Fork le projet
- Créez votre branche de fonctionnalité (
git checkout -b feature/amazing-feature
) - Suivez les standards de code
- Écrivez des tests pour votre code
- Committez vos changements (
git commit -am 'feat: add amazing feature'
) - Poussez vers la branche (
git push origin feature/amazing-feature
) - Ouvrez une Pull Request en utilisant notre template
git clone https://github.com/votre-username/autotest-ia.git
cd autotest-ia
bundle install
bundle exec rspec # Vérifier que tout fonctionne
- 📖 Documentation complète
- 🤝 Guide de contribution
- 💬 Discussions GitHub
- 📧 Contact : [email protected]
git clone https://github.com/username/autotest-ia.git
cd autotest-ia
bundle install
bundle exec rake spec
Ce projet maintient une couverture de tests élevée grâce à SimpleCov. La couverture actuelle est de 91.04%.
Après avoir exécuté les tests, vous pouvez consulter le rapport détaillé :
# Exécuter les tests avec couverture
bundle exec rspec
# Ouvrir le rapport HTML (macOS)
open coverage/index.html
# Ouvrir le rapport HTML (Linux)
xdg-open coverage/index.html
La configuration SimpleCov est définie dans spec/spec_helper.rb
avec :
- Seuil minimum de couverture : 80%
- Seuil minimum par fichier : 70%
- Exclusions : répertoires
spec/
,vendor/
,bin/
, etc. - Groupement par modules pour une analyse claire
Un script utilitaire permet de mettre à jour automatiquement le badge de couverture dans le README :
# Après exécution des tests
./bin/update_coverage_badge
Ce script :
- Extrait automatiquement le pourcentage de couverture depuis SimpleCov
- Met à jour le badge avec la couleur appropriée (rouge < 50%, orange < 70%, jaune < 80%, vert foncé < 90%, vert >= 90%)
- Met à jour le tableau de couverture avec le nouveau pourcentage
Un autre script utilitaire vérifie les versions des dépendances principales :
# Vérifier les versions des dépendances
./bin/check_dependencies
Ce script :
- Vérifie les dernières versions disponibles sur RubyGems
- Compare avec les versions configurées dans le gemspec
- Suggère les mises à jour nécessaires pour les badges
- Recommande les actions à prendre
💡 Note : Les badges de dépendances sont automatiquement mis à jour pour refléter les dernières versions compatibles disponibles. Exécutez
./bin/check_dependencies
régulièrement pour maintenir vos badges à jour.
Pour une maintenance complète en une seule commande :
# Mettre à jour tous les badges et vérifier les dépendances
./bin/update_all_badges
Ce script maître :
- Exécute la mise à jour du badge de couverture
- Vérifie les versions des dépendances
- Fournit un rapport complet avec les actions recommandées
- Guide pour les prochaines étapes de maintenance
Composant | Couverture cible | Status |
---|---|---|
Modèles principaux | > 95% | ✅ |
CLI et interfaces | > 85% | ✅ |
Utilitaires | > 90% | ✅ |
Global | > 90% | ✅ 91.04% |
Ce projet est sous licence MIT. Voir le fichier LICENSE.txt pour plus de détails.
- Langchain.rb pour l'interface IA
- Listen pour la surveillance des fichiers
- Thor pour la CLI
- SimpleCov pour la couverture
- La communauté Ruby/Rails pour l'inspiration
Développé avec ❤️ pour automatiser l'écriture de tests et améliorer la qualité du code Ruby/Rails
Pour plus d'informations, consultez la documentation complète ou ouvrez une issue.