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

30
  • Quels sont les outils utilisés TDD dans Drupal (modules PHP, modules Drupal, 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 poste technique ici des tests unitaires dans Drupal avec SimpleTest; Je suis plus intéressé à couvrir la partie workflow et configuration. Actuellement, j'ai une machine de développement, un serveur de transfert et de production. Les sites de production et de scène fonctionnent sur un processeur VPS Dreamhost de 300 Mo de RAM / 300 MHz.

barista amateur
la source

Réponses:

8

Dans le monde rubis, TDD est facilité par des outils intégrés dans le framework. Factory Girl, Mocha, rSpec et 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 proche avenir 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 démarre Drupal manuellement. Évidemment, je rencontre des problèmes et je ne l'ai pas terminé, mais ça y arrive.

Heureusement, la plupart 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 endurer les mauvaises performances.

-- MISE À JOUR --

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

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

- MISE À JOUR 2 -

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

trimbletodd
la source
Nous vous remercions de votre contribution. C'est très intéressant ce qui se passe avec Phactory pour les tests unitaires. Au plaisir de voir ce module Drupal que vous avez cuisiné;)
barista amateur
J'ai mis un rapide document sur la façon dont je gère Phactory dans Drupal sur ma fourche. J'ai soumis une demande d'extraction au maître, mais elle n'a pas encore été incorporée. github.com/trimbletodd/phactory
trimbletodd
Cette question et ses réponses reviennent toujours à ce jour. Vous basculez pour rouler votre propre fourche / solution. Par conséquent, vous recevez le prix de réponse accepté, monsieur.
barista amateur
12

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

Test fonctionnel: Selenium
Unit testing: Simpletest
Build server: Jenkins
Performance benchmarking: 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, By The Numbers , tests 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.

barista amateur
la source
1
Hou la la! Merci d'être revenu 2 ANS plus tard pour nous faire savoir ce que vous avez découvert! You rock :)
Chapabu
5

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/689990 . 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 :)

Berdir
la source