Test d'intégration en CI/CD

Par si-gi, il y a 1 an


Bonjour,
Actuellement je veux refactorisé des tests unitaires, fonctionnels et d'intégration dans un CI/CD pour une application sous symfony 6.4

Je refactorise mon code pour me passer de base de donnée. Pour réaliser mes requêtes sur les routes, auparavant j'utilisais du code classique:

$client = static::createClient(); $userRepository = static::getContainer()->get(UserRepository::class); // retrieve the test user $testUser = $userRepository->findOneByEmail('john.doe@example.com'); $client->loginUser($testUser); // test e.g. the profile page $client->request('GET', '/profile'); $this->assertResponseIsSuccessful();

Je veux donc me passer du userRepository, et ne pas passer par la BDD
Sauf que $client->loginUser() fait appel à la BDD et me renvoit une erreur systématiquement
J'ai essayé d'autres alternatives (inmemoryuser) sans succès. En sachant que je passe par un système de SSO, je ne veux pas de requête de connexion pour mes tests
J'ai essayé d'autres alternatives plus complexes impliquant plus de code sans succès.

J'en suis venu à me poser la question:
Ce type de test ne devrait-il-pas avoir lieu après le déploiement ?
AI-je une mauvaise compréhension du role et du moment de l'execution de certains tests ?

Si ces tests ont lieu après le déploiement, avec la possibiltié de créer une base de donnée test, le problème serait réglé, mais je ne suis pas certains de cette pratique

Sinon, avez-vous une idée ou une solution pour ce problème ?
Merci d'avance

1 réponse

BernardNgandu, il y a 1 an

pour ces genres de cas j'utilise une base de donnée sqlite en phase de test, github action ou gitlab ci supporte docker, tu pourrais donc définir tes services avec docker compose et avoir une bdd dispo en CI - github action aussi supporte des services (comme mysql etc...)

name: Test on: [ push, pull_request ] jobs: test: name: PHPUnit Symfony Testing runs-on: ubuntu-latest services: mysql: image: mysql:latest env: MYSQL_ALLOW_EMPTY_PASSWORD: false MYSQL_ROOT_PASSWORD: root MYSQL_DATABASE: root ports: - 3306/tcp options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3 strategy: fail-fast: false

exemple :

- name: Run tests run: vendor/bin/phpunit env: DATABASE_URL: mysql://root:root@127.0.0.1:${{ job.services.mysql.ports['3306'] }}/app

et tu peux préciser l'url de la bdd avec des variables d'environnements