2013-01-25 15 views
22

In realtà sono nuovo di JavaScript e di Jasmine. Quindi potrebbe essere qualcosa di veramente ovvio che risolve il mio problema ma non riesco a vederlo.Spiare su console.error() con Jasmine

Voglio verificare se (un'applicazione già esistente) JavaScript chiama console.error() durante il caricamento. Non vedo davvero come realizzarlo con Jasmine. Ho incluso il file JavaScript e il file spec nello SpecRunner.html. Ma suppongo che in qualche modo devo "istanziare" l'applicazione per verificare se getta qualche errore sulla console, giusto?

Oppure devo includere il codice SpecRunner.html solo per questo scopo nel codice HTML dell'app?

risposta

38

è possibile spiare console.error come questo:

beforeEach(function(){ 
    spyOn(console, 'error'); 
}) 

it('should print error to console', function(){ 
    yourApp.start(); 
    expect(console.error).toHaveBeenCalled(); 
}) 
+0

Sì, questo è quello che stavo supponendo. Ma questo non ce la farà. Potrebbe avere qualcosa a che fare con come è strutturata l'app. Ma grazie per l'aiuto! – Christian

+0

Va bene, ho controllato ancora, ho apportato alcune modifiche e ha funzionato. Immagino che tutto ciò di cui avevo bisogno fosse la certezza che questo fosse il modo in cui dovrebbe funzionare. Grazie ancora! – Christian

+1

Ora è più appropriato usare un file '.and.clickThrough();' o 'and.callFake (function() {...});' piuttosto che lasciare la funzione nuda, usando Jasmine 2.x. Spero possa aiutare. ç§ – CSS

0

è possibile ignorare la funzione Console.Error standard come questo:

//call the error function before it is overriden 
console.error('foo'); 

//override the error function (the immediate call function pattern is used for data hiding) 
console.error = (function() { 
    //save a reference to the original error function. 
    var originalConsole = console.error; 
    //this is the function that will be used instead of the error function 
    function myError() { 
    alert('Error is called. '); 
    //the arguments array contains the arguments that was used when console.error() was called 
    originalConsole.apply(this, arguments); 
    } 
    //return the function which will be assigned to console.error 
    return myError; 
})(); 

//now the alert will be shown in addition to the normal functionality of the error function 
console.error('bar'); 

Questa soluzione funziona con Jasmin o qualsiasi altra cosa. Basta inserire il codice sopra prima che gli altri codici e ogni chiamata successiva a questo a console.error() chiamerà la funzione sostituita.

Problemi correlati