Модульное тестирование с внешней библиотекой в Жасмине
Как выполнить модульное тестирование вашего кода, если он сильно принадлежит внешней библиотеке и в каждом из своих методов он вызывает какую-то функцию внешней библиотеки. Если все издеваться, чем охват кода, как Стамбул, не считайте эти строки насмешливыми. У кого есть опыт модульного тестирования с привлечением внешних зависимостей и библиотек, какова лучшая практика?
Например, у нас есть 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().
1 ответ
В идеале вы не должны тестировать внешние библиотеки, это не ваша работа.
В этом случае вы можете просто использовать шпиона и посмотреть, была ли вызвана эта библиотека. http://jasmine.github.io/2.2/introduction.html
например, взято из документации Жасмин:
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);
});
});