【问题标题】:Unit testing with external library in Jasmine在 Jasmine 中使用外部库进行单元测试
【发布时间】:2016-08-25 16:04:39
【问题描述】:

如果代码大量属于外部库并且在其每个方法中调用一些外部库函数,如何对代码进行单元测试。 如果要模拟所有内容,那么像伊斯坦布尔这样的代码覆盖率就不算被模拟的那些行。谁有涉及外部依赖项和库的单元测试经验,最佳实践是什么?

例如,我们有 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() 一个。

【问题讨论】:

    标签: javascript unit-testing jasmine karma-jasmine istanbul


    【解决方案1】:

    理想情况下,您不应该测试外部库,这不是您的工作。

    在这种情况下,您可以使用 spy 并查看该库是否已被调用。 http://jasmine.github.io/2.2/introduction.html#section-Spies

    例如取自 Jasmine 文档:

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

    【讨论】:

      猜你喜欢
      • 2016-07-07
      • 1970-01-01
      • 1970-01-01
      • 2020-01-03
      • 1970-01-01
      • 2016-08-14
      • 2015-09-01
      • 2014-08-15
      • 1970-01-01
      相关资源
      最近更新 更多