it-swarm.it

Come fare Test Driven Development (TDD) in Drupal?

  • Quali sono gli strumenti utilizzati TDD in Drupal (moduli PHP, Drupal moduli, ecc.)?
  • Che aspetto ha il tuo flusso di lavoro di commit/test/deploy? Usi Phing, PHPUnderControl, Hudson per gestire questo flusso di lavoro?
  • In che modo i test unitari rendono il tuo codice più affidabile?
  • Hai bisogno di un server di test unità separato, costoso e autonomo o puoi farlo da un laptop?

So che Robert ha scritto un eccellente post tecnico qui sui test unitari in Drupal con SimpleTest; sono più interessato a coprire il flusso di lavoro e la parte di configurazione. Attualmente ho un macchina di sviluppo, server di gestione temporanea e di produzione Sia i siti di produzione che quelli di stage funzionano su una CPU Dreamhost VPS da 300 MB di RAM/300 MHz.

29
amateur barista

Nel mondo Ruby, TDD è facilitato da strumenti integrati nel framework. Factory Girl, Mocha, rSpec e altri consentono agli sviluppatori di creare test facili e dinamici per affrontare i casi di test necessari.

Sono stato anche frustrato dalla mancanza di strumenti TDD in Drupal. Il mio più grande problema con loro è la quantità di tempo necessaria per eseguire un singolo test. I cicli di sviluppo non possono essere rallentati da test individuali che richiedono 60-90 secondi per ogni iterazione. Le suite complete di test verrebbero eseguite nell'arco di più ore, se ti preoccupi di scrivere i test.

Ho il sospetto che abbia a che fare con la copia di un db completo ogni volta che viene eseguito un test, ma non è probabile che cambi in un prossimo futuro da quello che posso dire, soprattutto se è necessario utilizzare DrupalWebTestCase per farlo.

Sto hackerando insieme una soluzione usando Phactory e phpunit, che avvia manualmente Drupal. Ovviamente ho riscontrato alcuni problemi e non l'ho ancora finito, ma ci sta arrivando.

Fortunatamente la maggior parte del mio lavoro è a livello di backend, quindi posso rimanere al livello DRUPAL_BOOTSTRAP_DATABASE. Ma sto correndo in altre situazioni in cui avrò bisogno dell'intero stack.

Alla fine, TDD in Drupal non è ben supportato, quindi puoi scriverne uno tuo per farlo funzionare al di fuori del framework di test drupal o resistere alle scarse prestazioni.

-- AGGIORNARE --

Ho installato con successo una completa Drupal integrazione con Phactory, e ora sto eseguendo i miei test tramite phpunit invece che Drupal Web Test Case. Quindi è possibile.

Spero di arrivare al punto in cui posso rilasciarlo e può essere incorporato nel documento Phactory.

- AGGIORNAMENTO 2 -

Doc su come installo Phactory è su https://github.com/trimbletodd/phactory .

8
trimbletodd

Poiché il blog di Mark non è in linea, menzionerò alcuni degli strumenti implementati dal suo team:

Test funzionali: selenio
Test unitario: il più semplice
Build server: Jenkins
Analisi comparativa delle prestazioni: XDebug + Cachegrind

Nei due anni trascorsi da quando ho posto questa domanda, ho visto alcuni strumenti aggiuntivi guadagnare popolarità nella scena TDD. Oggi quando parli di Test Driven Development (in un contesto Drupal, ovviamente) ci sono due facce della stessa medaglia: test front-end e test back-end.

Ecco due presentazioni che si distinguono dall'ultimo Drupalcon Portland 2013 che rappresentano questo argomento:

Development, By The Numbers , test di backend.
Test automatizzato con Jasmine e PhantomJS , test frontend.

La prima presentazione non è correlata a test unitari o funzionali (in senso stretto), riguarda più gli strumenti per misurare la qualità del codice. Tuttavia, ritengo che sia in qualche modo correlato all'argomento.

13
amateur barista

L'unica cosa di cui sono a conoscenza è che per i moduli contribuiti è possibile abilitare il test automatico delle patch di commit e nella coda dei problemi, vedere - http://drupal.org/node/68999 . È ancora alquanto instabile, soprattutto se si hanno dipendenze.

La maggior parte dei progetti probabilmente sta facendo qualcosa di più sulla falsariga di uno sviluppo guidato da bug, che in sostanza si riduce a scrivere un test prima quando viene trovato un bug e poi a risolverlo. Se mai;)

Dalla mia esperienza personale, TDD è piuttosto difficile in Drupal, perché spesso non scrivi (solo) test unitari con Simpletest ma test di integrazione, in cui visualizzi pagine e invii moduli. Quindi può essere piuttosto difficile scrivere buoni test in anticipo. Ma forse non sono abituato a farlo :)

5
Berdir