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

时间:2016-04-30 14:39:13

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

如果代码严重属于外部库,并且在其每个方法中调用一些外部库函数,如何对代码进行单元测试。 如果一切都要模仿,那么像伊斯坦布尔这样的代码覆盖范围并不算这些线条被嘲笑。谁有参与外部依赖和库的单元测试经验,最佳实践是什么?

例如,我们有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。

1 个答案:

答案 0 :(得分:2)

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

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

e.g。取自Jasmine文档:

<div id="myModal" class="modal">
  <span class="close">×</span>
  <img class="modal-content" id="img01">
  <div id="caption"></div>
</div>

<script>
var modal = document.getElementById('myModal');

var span = document.getElementsByClassName("close")[0];

span.onclick = function() { 
    modal.style.display = "none";
}

var images = document.getElementsByTagName('img');
var modalImg = document.getElementById("img01");
var captionText = document.getElementById("caption");
var i;
for (i = 0; i < images.length; i++) {
   images[i].onclick = function(){
       modal.style.display = "block";
       modalImg.src = this.src;
       modalImg.alt = this.alt;
       captionText.innerHTML = this.nextElementSibling.innerHTML;
   }
}
</script>