web-dev-qa-db-fra.com

Comment faire du Test Driven Development (TDD) dans Drupal?

  • Quels sont les outils utilisés TDD dans Drupal (modules PHP, Drupal modules, etc.)?
  • À quoi ressemble votre workflow de validation/test/déploiement? Utilisez-vous Phing, PHPUnderControl, Hudson pour gérer ce flux de travail?
  • De quelle manière les tests unitaires rendent-ils votre code plus fiable?
  • Avez-vous besoin d'un serveur de test unitaire autonome, cher ou séparé, ou pouvez-vous le faire à partir d'un ordinateur portable?

Je sais que Robert a écrit un excellent article technique ici sur les tests unitaires en Drupal avec SimpleTest; je suis plus intéressé à couvrir le workflow et la partie configuration. Actuellement, j'ai un machine de développement, serveur de mise en scène et de production.Les sites de production et de scène fonctionnent sur un processeur Dreamhost VPS de 300 Mo de RAM/300 MHz.

29
amateur barista

Dans le monde Ruby, TDD est facilité par des outils intégrés dans le framework. Factory Girl, Mocha, rSpec et d'autres permettent aux développeurs de créer facilement et dynamiquement des tests qui répondent aux cas de test nécessaires.

J'ai également été frustré par le manque d'outils TDD dans Drupal. Mon plus gros problème avec eux est le temps nécessaire pour exécuter un seul test. Les cycles de développement ne peuvent pas être ralentis par des tests individuels prenant 60 à 90 secondes à chaque itération. Les suites de tests complètes s'exécuteraient dans le délai de plusieurs heures, si vous prenez la peine d'écrire les tests.

Je soupçonne que cela a à voir avec la copie d'une base de données complète à chaque fois qu'un test est exécuté, mais cela ne changera probablement pas dans un avenir proche de ce que je peux dire, surtout si vous devez utiliser DrupalWebTestCase pour le faire.

Je pirate ensemble une solution utilisant Phactory et phpunit, qui amorce manuellement Drupal manuellement). Évidemment, je rencontre des problèmes et je ne l'ai pas terminé, mais ça y arrive.

Heureusement, la majeure partie de mon travail se situe au niveau du backend, donc je peux rester au niveau DRUPAL_BOOTSTRAP_DATABASE. Mais je cours dans plus de situations où j'aurai besoin de la pile complète.

En fin de compte, TDD dans Drupal n'est pas bien pris en charge, vous pouvez donc écrire le vôtre pour le faire fonctionner en dehors du cadre de test drupal, ou supporter le mauvaise performance.

-- MISE À JOUR --

J'ai réussi à configurer une intégration complète Drupal avec Phactory, et j'exécute maintenant mes tests via phpunit au lieu du Drupal scénario de test Web. C'est donc possible.

J'espère arriver à un point où je pourrai le publier et qu'il pourra être incorporé dans le doc Phactory.

- MISE À JOUR 2 -

Doc sur la façon dont je configure Phactory à https://github.com/trimbletodd/phactory .

8
trimbletodd

Étant donné que le blog de Mark est hors ligne, je mentionnerai certains des outils que son équipe a mis en œuvre:

Test fonctionnel: sélénium
Test unitaire: Simpletest
Serveur de build: Jenkins
Analyse comparative des performances: XDebug + Cachegrind

Au cours des deux années qui se sont écoulées depuis que j'ai posé cette question, j'ai vu des outils supplémentaires gagner en popularité sur la scène TDD. De nos jours, lorsque vous parlez de développement piloté par les tests (dans un contexte Drupal, bien sûr), il y a deux côtés à la même pièce: les tests frontaux et les tests back-end.

Voici deux présentations qui se démarquent du dernier Drupalcon Portland 2013 représentant ce sujet:

Développement, en chiffres , test du backend.
Tests automatisés avec Jasmine et PhantomJS , tests frontaux.

La première présentation n'est pas liée aux tests unitaires ou fonctionnels (à proprement parler), il s'agit plutôt d'outils pour mesurer la qualité du code. Néanmoins, je pense que c'est quelque peu lié au sujet.

13
amateur barista

La seule chose que je sache, c'est que pour les modules contribués, vous pouvez activer le test automatisé des validations et des correctifs dans la file d'attente des problèmes, voir - http://drupal.org/node/68999 . Il est encore quelque peu instable, surtout si vous avez des dépendances.

La plupart des projets font probablement plus quelque chose dans le sens d'un développement axé sur les bogues, ce qui revient essentiellement à écrire un test d'abord lorsqu'un bogue a été trouvé, puis à le corriger. Le cas échéant;)

D'après mon expérience personnelle, TDD est plutôt difficile dans Drupal, car souvent, vous n'écrivez pas (uniquement) des tests unitaires avec Simpletest mais des tests d'intégration, où vous affichez des pages et soumettez des formulaires. Il peut donc être assez difficile de rédiger à l'avance de bons tests. Mais peut-être que je n'ai pas l'habitude de faire ça :)

5
Berdir