2016-04-30 3 views
0

Как модульный тест вашего кода, если он в значительной степени принадлежит внешней библиотеке, и в каждом из своих методов он вызывает некоторую внешнюю библиотечную функцию. Если все, чтобы насмехаться, чем покрытие кода, например, Стамбул, не считают эти линии насмехающимися. У кого есть опыт модульного тестирования с участием внешних зависимостей и библиотек, какова наилучшая практика?Модульное тестирование с внешней библиотекой в ​​Jasmine

Например, у нас есть 2 внутренних функции и 3 функции внешней библиотеки. Если вы издеваетесь над этими внешними, то Стамбул не считает эти линии закрытыми.

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; 
} 

Как написать тест для internalFoo1(), так что модульное тестирование будет охватывать все его строки кода, а также internalFoo2() один.

ответ

0

В идеале вы не должны тестировать внешние библиотеки, это не ваша работа.

В этом случае вы можете просто использовать шпион и посмотреть, была ли эта библиотека вызвана. http://jasmine.github.io/2.2/introduction.html#section-Spies

например. взято из документации Жасмина:

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); 
    }); 
});