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
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