Comment tester des thèmes ou des composants de thème ?

J’ai trouvé ce sujet sur les tests de plugins (automatiques), mais je n’ai rien trouvé mentionnant comment tester des thèmes ou des composants de thème. Existe-t-il des exemples montrant comment utiliser QUnit (ou un outil similaire) avec des thèmes ?

Vous pouvez l’ajouter à un thème sélectionnable par l’utilisateur ou utiliser le lien de test sur la page d’administration du thème.

Désolé, je voulais dire tests automatisés — je vais modifier mon message précédent. Je pensais à quelque chose comme QUnit que certains plugins utilisent déjà.

Non, il n’est pas possible d’ajouter des tests QUnit aux thèmes/composants pour le moment…

@david, dans quelle mesure serait-il possible d’ajouter la prise en charge d’un dossier /test comme pour les plugins ? Nous devrions également activer le thème lors de l’exécution des tests, car les tests principaux s’exécutent sans aucun thème, n’est-ce pas ?

C’est tout à fait possible, mais cela demandera un peu de travail. Pour l’instant, tous les fichiers JavaScript du thème sont regroupés en un seul fichier. Nous devrons nous assurer que les tests sont placés dans un nouveau bundle séparé, afin qu’ils ne soient pas servis aux visiteurs ordinaires. Une fois cela fait, il faudra mettre en place un moyen d’exécuter les tests QUnit pour un thème spécifique.

L’autre point à considérer est que nous ne rendons pas la route /qunit disponible sur les serveurs de production. Étant donné que les thèmes sont souvent développés sur des serveurs de production, il faudra peut-être repenser cette approche :thinking:

C’est, à mon avis, l’un des principaux inconvénients des composants de thème. Ils sont extrêmement faciles à déployer, ce qui est fantastique, mais les tests sont souvent mis de côté.

Si je comprends bien, tout ce qui peut être réalisé avec un composant de thème peut l’être également avec un plugin. Le premier est plus simple à déployer, tandis que le second permet des tests.

Oui, c’est généralement exact. Il s’agit en fin de compte d’un compromis en fonction de ce que vous personnalisez. Par exemple, l’ajout d’une feuille de style personnalisée ne pourrait probablement pas être testé, même dans un plugin. C’est lors de l’ajout de contrôles et de widgets JavaScript personnalisés que les choses deviennent douteuses.

J’ai l’impression que nous devrions prendre en compte ce problème lorsque nous travaillerons sur Ember CLI. Rien n’empêche de mettre en place un certain type de testeur de thèmes, et nous pourrions inclure certaines fonctionnalités de base dans le gem discourse-theme pour configurer des tests locaux en utilisant Ember CLI.

Cependant, exécuter des tests de thème nécessiterait une installation complète de Discourse, n’est-ce pas ? Il y a tellement d’interdépendances que je ne pense pas que nous puissions tester les thèmes de manière indépendante :thinking:

Peut-être que le theme-cli pourrait inclure une logique pour récupérer l’image docker discourse_dev et exécuter les tests qunit à l’intérieur de celle-ci ?

L’idée même d’Ember CLI est de séparer proprement le serveur du client. Nous pourrions fournir suffisamment d’éléments côté JS pour tester le client sans faire tourner un serveur Rails. Vous auriez bien sûr toujours besoin de Node et d’Ember CLI installés, mais vous pourriez vous en sortir sans installer toute la pile Discourse, y compris Redis et Postgres.

Cela peut être délicat, mais c’est quelque chose que nous pouvons tout à fait garder à l’esprit.

Nous prenons désormais en charge les tests dans les thèmes (mise à jour tardive, la prise en charge des tests de thèmes a été ajoutée mi-2021). Vous pouvez accéder à /theme-qunit dans votre environnement local ou sur votre site de production, et tous les thèmes/composants installés qui ont des tests y seront répertoriés. Voir Discourse Tab Bar for Mobile ou Composant d’icônes de balises pour des exemples.

C’est génial. Est-ce que cela s’étendra aux tests de javascript dans les Plugins ?

Voulez-vous dire pouvoir exécuter des tests en production ? C’est uniquement pour les thèmes pour le moment.

(Localement, vous pouvez exécuter des tests JS de plugins, bien sûr.)

Je pense que l’objectif serait de pouvoir les exécuter dans CI sur GitHub, comme nous pouvons actuellement le faire avec les spécifications (à la fois Theme. et Plugin JS) ?

Oui, nous exécutons des tests dans CI pour tous les plugins officiels.