2010-06-18 16 views
1

Comment puis-je Refactor pour éliminer la duplication de code dans cette spécification:BDD/TDD avec JSpec - Suppression de la duplication de code

describe 'TestPlugins' 
    describe '.MovieScanner(document)' 
     before_each 
      MoviePage_loggedIn = fixture("movie_logged_in.html")    // Get logged-in movie page 
      MoviePage_notloggedIn = fixture("movie_not_logged_in.html")  // Get non logged-in movie page 
      scanner = new MovieScanner()            // Get movie scanner 
     end 

     it 'should scan logged-in movie page for movie data' 
      doc = MoviePage_loggedIn   // Get document to scan 

      // Unit Tests 
      // ------------------------------------------------------------ 

      // Test movie scanner's functions 
      scanner.getMovieTitle(doc).should.eql "The Jacket" 
      scanner.getMovieYear(doc).should.eql "2005" 

      // Test movie scanner's main scan function 
      scannedData = scanner.scan(doc) 
      scannedData.title.should.eql "The Jacket" 
      scannedData.year.should.eql "2005" 
     end 

     it 'should scan non logged-in movie page for movie data' 
      doc = MoviePage_notloggedIn  // Get document to scan 

      // Unit Tests 
      // ------------------------------------------------------------ 

      // Test movie scanner's functions 
      scanner.getMovieTitle(doc).should.eql "The Jacket" 
      scanner.getMovieYear(doc).should.eql "2005" 

      // Test movie scanner's main scan function 
      scannedData = scanner.scan(doc) 
      scannedData.title.should.eql "The Jacket" 
      scannedData.year.should.eql "2005" 
     end 
    end 
end 

Répondre

0

En BDD, nous voulons décrire le comportement de notre application ou des cours pour les rendre faciles changer. Si la suppression de la duplication masque également le comportement, ne supprimez pas la duplication. Le code est lu 10 fois plus que ce qui est écrit, et IME encore plus pour les scénarios BDD et les exemples au niveau de l'unité.

Si vous décidez malgré tout de supprimer la duplication, remplacez-la par quelque chose de lisible. Je ne suis pas familier avec JSpec mais j'attends quelque chose comme

scannedData.shouldMatch "The Jacket", "2005" 

où tous les résultats pertinents pour le titre et l'année sont vérifiés.

Pour supprimer la duplication hors de propos si vous connecté ou non:

Séparer le code dans Givens (contexte où il n'a pas d'importance comment vous y êtes arrivé), Whens (événements via l'application dont le comportement que vous avez réellement vouloir tester) et Thens (résultats que vous cherchez). Vous cherchez à décrire les capacités du système et les choses qu'un utilisateur peut faire avec, plutôt que de savoir s'il s'agit d'une page Web ou d'une fenêtre - cela ne devrait pas avoir d'importance. Mettez les appels de niveau inférieur à un niveau inférieur.

Vous pouvez alors avoir deux données différentes - connecté ou non connecté - et réutiliser les autres étapes pour le reste.

+0

Merci pour votre réponse! Je voulais dire, comment puis-je combiner les tests pour les pages connectées et non connectées afin que le même code de test ne soit pas dupliqué à travers les tests? – Chetan

+0

Modifié. J'espère que cela aide! – Lunivore