2013-01-25 6 views
22

Jestem właściwie nowy w JavaScript, a także w Jasmine. Może to być coś naprawdę oczywistego, które rozwiązuje mój problem, ale nie widzę go.Szpiegowanie na konsole.error() z Jasmine

Chcę sprawdzić, czy (już istniejąca) aplikacja JavaScript wywołuje console.error() podczas ładowania. Naprawdę nie widzę sposobu, aby zrealizować to z Jasmine. Załączam plik JavaScript, a także plik spec w pliku SpecRunner.html. Ale rozumiem, że muszę jakoś "utworzyć" aplikację, aby sprawdzić, czy nie zgłasza błędów na konsoli, prawda?

Czy powinienem dołączyć kod SpecRunner.html tylko w tym celu do kodu HTML aplikacji?

Odpowiedz

38

można szpiegować console.error tak:

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

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

Tak, to co ja przypuszczeń. Ale to się nie uda. Może mieć coś wspólnego ze strukturą aplikacji. Ale dzięki za pomoc! – Christian

+0

W porządku, sprawdziłem ponownie, wprowadziłem kilka poprawek i zadziałało. Sądzę, że wystarczyło mi tylko upewnić się, że tak właśnie powinien działać. Dzięki jeszcze raz! – Christian

+1

Teraz bardziej odpowiednie jest użycie '.and.clickThrough();' lub 'and.callFake (function() {...});' zamiast pozostawienia funkcji nago, używając Jasmine 2.x. Nadzieja, która pomaga. DO§ – CSS

0

Można zastąpić standardową funkcję console.error tak:

//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'); 

Rozwiązanie współpracuje z Jasmin lub cokolwiek innego. Wystarczy umieścić powyższy kod przed innymi kodami, a następnie wywołać je, aby console.error() wywołać funkcję zastępowaną.