Domanda

Come faccio a refactoring per rimuovere la duplicazione del codice in questa spec:

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
È stato utile?

Soluzione

In BDD, vogliamo descrivere il comportamento della nostra applicazione o le classi per renderli facile da cambiare. Se la rimozione duplicazione sarebbe anche oscurare il comportamento, non rimuovere la duplicazione. Il codice viene letto 10 volte più di quello che è scritto, e IME ancora di più per BDD scenari e gli esempi a livello di unità.

Se si decide di rimuovere la duplicazione in ogni caso, sostituirlo con qualcosa di leggibile. Io non sono a conoscenza JSpec ma mi aspetto qualcosa di simile

scannedData.shouldMatch "The Jacket", "2005"

dove vengono controllati tutti i risultati rilevanti per titolo e anno.

Per rimuovere la duplicazione irrilevante dal fatto che l'accesso o meno:

separare il codice in Givens (contesto in cui non importa come ci sei arrivato), Whens (eventi attraverso l'applicazione quale comportamento si vuole realmente test) e thens (risultati che stai cercando). Stai cercando di descrivere le capacità del sistema e le cose che un utente può fare con esso, piuttosto che si tratti di una pagina web o una finestra - non dovrebbe importare. Mettere le chiamate di livello inferiore a un livello inferiore.

Si può quindi avere due diverse Givens - collegato o non connesso -. E riutilizzare le altre fasi per il resto

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top