plug in sylius

Comment (mieux) tester un plugin Sylius ?

Par Olivier A. le 31 juillet 2020

Vous le savez peut être déjà, mais un petit rappel peut être utile. Sylius est un framework e-commerce basé sur Symfony dont le but est de proposer une base de code stable permettant de créer des sites e-commerce. Sylius ne couvre pas tous les besoins car ce n’est pas son but. Néanmoins, pour répondre à toutes les attentes des utilisateurs, il est possible de créer un plugin.

Un plugin, c’est quoi ?

Un plugin est une “extension” ajoutée à un projet pour répondre à un besoin. L’écosystème Sylius en propose déjà de toutes sortes :

  • Ajout de systèmes de paiement
  • Communication avec les transporteurs
  • Gestion avancée des produits

Vous pouvez les retrouver en ligne. Mais, lors de la création d’un site e-commerce, il se peut qu’aucun plugin ne couvre votre besoin. Dans ce cas, vous pouvez le créer en vous basant sur le PluginSkeleton proposé par Sylius. Le but de ce Skeleton est de vous donner une base pour développer votre propre plugin. A vous ensuite de l’adapter selon vos besoins métiers.

Et les tests dans tout ça ?

Le PluginSkeleton a, dans ses dépendances de développement, les librairies de tests suivantes :

  • Behat : permettant de faire des tests e2e (de bout en bout), basés sur des scénarios
  • PHPSpec : permettant d’écrire une spécification du code et de vérifier qu’il y est conforme
  • PHPStan : permettant de faire une analyse statique du code
  • PHPUnit : permettant de faire des tests unitaires (mais pas que) afin de valider que le code exécuté valide des assertions

Il existe également d’autres librairies dans divers domaines : debug, qualité de code, sécurité…

Certains de ces outils peuvent s’exécuter de manière indépendante. D’autres néanmoins ont besoin d’un contexte. Par exemple, dans notre cas, nous avons besoin d’une version de Sylius. Le PluginSkeleton embarque une version de Sylius avec la configuration requise pour qu’il fonctionne et nous permette de tester notre plugin.

Très bien, mais comment pouvons-nous améliorer cela ?

La matrice de tests

Comme nous l’avons vu précédemment, le PluginSkeleton embarque une Application Sylius dans son dossier de tests, voici ce que nous pouvons en dire :

Voici les avantages :

  • Installation automatique via le composer du Plugin
  • 0 configuration (ou presque) à faire
  • Pouvoir visualiser le rendu du plugin facilement
  • Exécution des tests ayant besoin d’un contexte facile[/icon-list-item]

Et les inconvénients :

  • Plugin testé dans une seule version de Sylius et de PHP
  • La version de l’application incluse ne permet pas de tester sur toutes les versions de Sylius
  • Dans cette version, un Sylius est construit autour de notre Plugin alors que dans une utilisation normale, un Sylius standard inclut le plugin

Comment pallier le manque de ces derniers points ?

En utilisant une matrice de versions de PHP et de Sylius pour exécuter les tests. Le but est de tester notre plugin de la manière suivante. Faire les tests ne nécessitant pas de context sur chaque version de PHP, puis faire les tests nécessitant un context (et donc une installation de Sylius) sur chaque version de Sylius installée sur chaque version de PHP souhaitée.

Cas pratique

Imaginons que nous voulions que le plugin soit compatible avec les deux dernières versions de Sylius, soit Sylius 1.6 et Sylius 1.7. Selon les pré-requis de Sylius, la matrice doit être de ce type :

Sylius 1.6 Sylius 1.7
PHP 7.2 Oui Non compatible
PHP 7.3 Oui Oui
PHP 7.4 Oui Oui

 

Les outils n’ayant pas besoin de l’installation de Sylius pour fonctionner peuvent être exécutés en premier sur chaque version de PHP. C’est le cas notamment de PHPStan et PHPSpec. Ces tests seront effectués de la manière suivante :

  • Sélection de la version de PHP
  • Installation des dépendances via Composer
  • Exécution de différents outils

Behat qui a besoin d’une installation de Sylius sera testé de la manière suivante :

  • Sélection de la version de PHP
  • Installation de Sylius Standard dans la version voulue
  • Installation du plugin
  • Configuration du plugin, cette opération est grandement facilité par l’utilisation de Symfony Flex.
  • Installation des pré-requis à Behat et sa configuration
  • Exécution des scénarios Behat.
plug in sylius

Exécution dans votre CI

Nous vous proposons l’exécution des points décrits précédemment en utilisant Github Actions, mais il peut tout à fait être adapté à vos autres outils de CI selon vos habitudes.

sylius plugin

Exécution des outils n’ayant pas besoin de contexte (par exemple EasyCodingStandard, PHPStan, PHPSpec).

 

plug in sylius

Exécution des outils ayant besoin de contexte comme par exemple Behat

Vous pouvez trouver le code source sur un des plugins Synolia.

En espérant que cet article vous a donné quelques pistes pour améliorer vos tests sans prétendre que cette manière de procéder est la meilleure. Nous pouvons en discuter sur twitter @oallain ou sur le Slack Sylius (pseudo oallain).

tags : Sylius
LinkedIn Google+ Email
GIF