2016-04-30 13 views
0

Wie Unit-Test Ihren Code, wenn es stark externe Bibliothek gehört und innerhalb jeder seiner Methoden ruft es einige externe Bibliotheksfunktion. Wenn alles zu verspotten, als Abdeckung Code wie Istanbul zählen nicht diese Zeilen verspottet. Wer hat Erfahrung in Komponententests mit Einbeziehung von externen Abhängigkeiten und Bibliotheken, was ist die beste Praxis?Komponententest mit externer Bibliothek in Jasmine

Zum Beispiel haben wir 2 interne Funktionen und 3 externe Bibliotheksfunktionen. Wenn diese Außenseiter verspotten, dann zählt Istanbul diese Linien nicht als abgedeckt.

function internalFoo1(input) { 
var result = internalFoo2(input*2); 
var finalResult = externalLibraryBar1(result); 
return result; 
}; 

function internalFoo2(value) { 
    var operation = externalLibraryBar2(value*2); 
    var response = externalLibraryBar3(operation); 
    return response; 
} 

Wie ein Test für internalFoo1 schreiben(), so wird Unit-Test deckt alle seine Codezeilen sowie internalFoo2() ein.

Antwort

0

Idealerweise sollten Sie keine externen Bibliotheken testen, es ist nicht Ihre Aufgabe.

In diesem Fall könnten Sie einfach einen Spion verwenden und sehen, ob diese Bibliothek aufgerufen wurde. http://jasmine.github.io/2.2/introduction.html#section-Spies

z.B. genommen von Jasmine Dokumentation:

describe("A spy, when configured with an alternate implementation", function() { 
    var foo, bar, fetchedBar; 

    beforeEach(function() { 
    foo = { 
     setBar: function(value) { 
     bar = value; 
     }, 
     getBar: function() { 
     return bar; 
     } 
    }; 

    spyOn(foo, "getBar").and.callFake(function() { 
     return 1001; 
    }); 

    foo.setBar(123); 
    fetchedBar = foo.getBar(); 
    }); 

    it("tracks that the spy was called", function() { 
    expect(foo.getBar).toHaveBeenCalled(); 
    }); 

    it("should not affect other functions", function() { 
    expect(bar).toEqual(123); 
    }); 

    it("when called returns the requested value", function() { 
    expect(fetchedBar).toEqual(1001); 
    }); 
});