Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/463.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Jasmine中使用外部库的单元测试_Javascript_Unit Testing_Jasmine_Karma Jasmine_Istanbul - Fatal编程技术网

Javascript Jasmine中使用外部库的单元测试

Javascript Jasmine中使用外部库的单元测试,javascript,unit-testing,jasmine,karma-jasmine,istanbul,Javascript,Unit Testing,Jasmine,Karma Jasmine,Istanbul,如果代码主要属于外部库,并且在每个方法中调用一些外部库函数,那么如何对代码进行单元测试。 如果一切都需要模拟,那么像伊斯坦布尔这样的代码覆盖率就不算模拟的代码行了。谁在涉及外部依赖项和库的单元测试方面有经验,最佳实践是什么 例如,我们有2个内部函数和3个外部库函数。 如果嘲笑那些外部的,伊斯坦布尔就不会把这些线算作覆盖 function internalFoo1(input) { var result = internalFoo2(input*2); var finalResult = ex

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

例如,我们有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()代码行。

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

在这种情况下,您可以使用一个间谍,看看是否调用了该库

e、 g.摘自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);
  });
});

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

在这种情况下,您可以使用一个间谍,看看是否调用了该库

e、 g.摘自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);
  });
});