Partie 4: Tests et Déploiement¶
circle Partie 4/4 - Temps estimé: 20 minutes
Objectif¶
Dans cette dernière partie, vous allez ajouter des tests unitaires et déployer votre API Blog avec Docker.
Ce que vous allez faire: - Écrire des tests unitaires pour le service Post - Lancer les tests - Créer une image Docker - Déployer avec docker-compose
Étape 12: Tests unitaires¶
12.1 Tester le service Post¶
Créer internal/domain/post/service_test.go:
package post_test
import (
"context"
"testing"
"blog-api/internal/models"
"blog-api/internal/interfaces/mocks"
"blog-api/pkg/logger"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/mock"
)
func TestPostService_Create(t *testing.T) {
// Arrange
mockRepo := new(mocks.PostRepository)
log := logger.New(&config.Config{AppEnv: "test"})
service := post.NewService(mockRepo, log)
mockRepo.On("Create", mock.Anything, mock.AnythingOfType("*models.Post")).
Return(nil)
// Act
result, err := service.Create(context.Background(), 1, "Test Title", "Test Content", "tag1,tag2")
// Assert
assert.NoError(t, err)
assert.NotNil(t, result)
assert.Equal(t, "Test Title", result.Title)
assert.Equal(t, "test-title", result.Slug)
mockRepo.AssertExpectations(t)
}
12.2 Lancer les tests¶
Étape 13: Déploiement Docker¶
13.1 Build l'image Docker¶
13.2 Lancer avec docker-compose¶
Le fichier docker-compose.yml est déjà généré:
Cela lance: - L'application sur le port 8080 - PostgreSQL sur le port 5432
13.3 Vérifier le déploiement¶
Conclusion¶
Félicitations! Vous avez créé une API Blog complète avec:
check_circle Authentification JWT (User, Login, Register) check_circle Articles (CRUD complet avec slug, tags, publish/unpublish) check_circle Commentaires (Create, List, Delete) check_circle Relations (Post → Author, Comment → Post + Author) check_circle Pagination (Limit/Offset) check_circle Tests unitaires check_circle Déploiement Docker check_circle Architecture hexagonale check_circle Logging structuré check_circle Error handling centralisé
Résumé de ce que vous avez appris¶
- Installation de create-go-starter
- Génération d'un projet complet
- Configuration (.env, PostgreSQL, JWT)
- Architecture hexagonale:
- Domain (entities, services)
- Adapters (handlers, repositories)
- Interfaces (ports)
- Dependency Injection avec uber-go/fx
- GORM (migrations, queries, relations)
- Fiber (routes, middleware, handlers)
- Tests avec testify et mocks
- Docker et docker-compose
Prochaines étapes¶
Pour aller plus loin:
- Upload d'images pour les articles
- Recherche full-text dans les posts
- Likes/Votes sur les articles
- Catégories pour organiser les posts
- Swagger pour documenter l'API
- CI/CD avec GitHub Actions
- Kubernetes pour déploiement en production
Ressources¶
- Guide des projets générés - Documentation complète
- Repository exemple - Code complet
- Fiber documentation
- GORM documentation
Bon coding! rocket_launch
Navigation¶
arrow_back Partie 3: Exposer l'API HTTP | arrow_back Retour à l'index