Модульное тестирование с внешней библиотекой в ​​Жасмине

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

Например, у нас есть 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);
  });
});
Другие вопросы по тегам