为什么角度模块的工厂方法应该在测试模拟中重新定义

时间:2016-04-09 08:10:26

标签: angularjs ngmock

在angular.js教程中,我找到了一个工厂测试的例子:

模块:

angular.module('omdbModule', [])
    .factory('omdbApi', function omdbApiFactory() { 
          return { 
              search: function() {
                 //logic to get data return movieData;
          }
    }

测试(可以通过两种方式进行:使用'$ provide'作为参数传递匿名函数:

 angular.mock.module(function($provide){
         $provide.factory('omdbApi', function(){ 
             return{
                search:function(query){
                  return movieData;
              }
         }
    });

或仅使用对象文字:

 angular.mock.module({
         'omdbApi':{
              { search:function(query){
                  return movieData;
              }
         }
    }); 

在这两种情况下我都不明白为什么必须在模拟中重新定义搜索功能,而不是仅仅获取工厂然后自动访问其所有属性和方法。我认为在模拟中定义整个工厂是好的,以防它在模块中不存在,但为什么在模块及其工厂已经定义并且它们确实存在时就完成了?

1 个答案:

答案 0 :(得分:0)

模拟服务的一个原因是为了防止需要固定装置(非$http XHR请求,DOM操作)或移动部件过多的不良操作。

另一个好理由是防止测试交叉污染。如果单元A中断,开发人员可能想知道究竟是什么坏了。如果B和C单元测试也是红色的话会变得更难,所以应该按照面包屑来判断问题制作者是否是A.如果面包屑停止并且最终调试app和specs而不是修复它会变得更难并且去工作。

除非测试对象要测试多个单元(这是集成测试,它是对单元测试的补充而不是替换它们),否则请单独测试每个单元。