2016-04-12 26 views
5

Sono nuovo al banco di prova gelsomini ho cercato di fare banco di prova per il gelsomino modulo di selezione dopo aver fatto questa struttura in stile sta diventando indefinitoCome fare test case gelsomino per la proprietà di visualizzazione nessuno css usando documet.getElementById e getElementsByClassName

function Selection() { 

    } 
    Selection.prototype.expandFlightDetails = function() { 

     document.getElementsByClassName("flight-details-container").style.display = 'none'; 
     document.getElementById("expandedFlightDetails").style.display = 'block'; 
    }; 
    Selection.prototype.hideFlightDetails = function() { 
     document.getElementById("expandedFlightDetails").style.display = 'none'; 
     document.getElementsByClassName("flight-details-container").style.display = 'block'; 

    }; 

mio testcase è

describe("selection module", function() { 
    var selection; 

    beforeEach(function() { 
     selection= new Selection(); 

    }); 
    afterEach(function() { 

    }); 
    it('expand the flight details part ' , function(){ 
     selection.expandFlightDetails(); 
     expect(document.body.getElementsByClassName('flight-details-container')[0].style.display).toEqual('none'); 

    }); 
    xit('hide the flight details part ', function(){ 
     selection.hideFlightDetails(); 
     expect(document.getElementById('expandedFlightDetails').style.display).toEqual('none'); 

    }); 
}); 

Dopo aver fatto questo che sto geting e rimosso il codice per beforEach

TypeError: Cannot read property 'style' of undefined

per favore correggimi se ho sbagliato

+0

proprietà 'style' che hai usato così tante volte? dove è arrivato questo errore? –

+0

@VikrantKashyap it ('espandi la parte dei dettagli del volo', function() { flightselection.expandFlightDetails(); expect (document.body.getElementsByClassName ('flight-details-container') [0] .style.display). toqual ('none'); }); per questo caso ho riscontrato questo errore –

+0

Stai includendo il file html che sta avendo un elemento con la classe "flight-details-container". ? – rajesh

risposta

5

Hai qualche errore su questo codice.

Prima in Selection.prototype.expandFlightDetails assicurarsi di ottenere il primo risultato della matrice (hai dimenticato la [0]):

document.getElementsByClassName("flight-details-container")[0] 

Stessa osservazione per Selection.prototype.hideFlightDetails

Poi nella vostra suite di test si crea un'istanza di selezione di nome selection ma in entrambi i test si sta utilizzando una variabile denominata flightselection che non viene dichiarata da nessuna parte. Non dovrebbe invece essere selection?

Infine, il problema sembra essere che si tenta di manipolare 'flight-details-container' nel test, anche se questo elemento viene creato sul callback afterEach. afterEach significa che questo verrà eseguito dopo ogni test, quindi non esiste durante il test.

+0

Ho modificato il codice ancora sto ottenendo lo stesso errore. Inoltre ho rimosso il codice da aftereach a beforeach in modo che ogni test case il codice eseguirà per favore correggimi se sbaglio. –

+0

Non hai risolto expandFlightDetails e hideFlightDetails. 'getElementsByClassName' restituisce una matrice quindi è necessario selezionare il primo elemento' [0] ' – floribon

+0

non dovrebbe controllare se' getElementsByClassName' restituisce almeno un elemento e quindi scegliere il primo? – Pietro