AngularJS单元测试使用茉莉花形式在表断测试中有效

时间:2014-10-21 11:12:12

标签: javascript angularjs unit-testing jasmine

我拉着我的头发试图弄清楚我失踪了什么,经过5小时的谷歌搜索我没有接近答案所以这是我的最后一击。

我有一个AngularJS应用程序,在其中一个单元测试中,我检查控制器在api调用后显示一些数据。我的问题是我在该控制器上有一个监视器正在运行一些日期验证,它正在破坏我的测试。如果我取下手表,测试通过正常。我从测试中得到的错误如下:

Result Message: TypeError: 'undefined' is not a function (evaluating '$scope.filterOrdersForm.txtDateFrom.$setValidity('txtDateFromValid', true)')

这是我的手表正在调用的代码:

$scope.checkSearchCriteriaDateValidity = function() {
     var dateFrom = moment($scope.searchCriteria.dateFrom);
     var dateTo = moment($scope.searchCriteria.dateTo);

     // check each date for validity
     if (dateFrom.isValid() !== true) {               
         $scope.filterOrdersForm.txtDateFrom.$setValidity('txtDateFromValid', false);
     } else {
         $scope.filterOrdersForm.txtDateFrom.$setValidity('txtDateFromValid', true);
     }

     if (dateTo.isValid() !== true) {
         $scope.filterOrdersForm.txtDateTo.$setValidity('txtDateToValid', false);
     } else {
         $scope.filterOrdersForm.txtDateTo.$setValidity('txtDateToValid', true);
     }

     // check if both are valid and if so make sure from date is before to date
     if (dateFrom.isValid() && dateTo.isValid()) {
          if (dateFrom.isAfter(dateTo)) {
               $scope.filterOrdersForm.txtDateFrom.$setValidity('fromBeforeTo', false);
          } else {
               $scope.filterOrdersForm.txtDateFrom.$setValidity('fromBeforeTo', true);
          }
     }
};

有些人可以指出我错过了什么。我是否必须对我的测试做一些特殊处理以解决这种情况?任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:-1)

我希望我的回答对你有所帮助。问题是$setvalidity是一个在jasmine脚本执行方法时未定义的方法。为了解决这个问题,你必须在调用相应的方法之前为set有效性创建一个mock方法。

请尝试以下代码方法,

 $scope.filterOrdersForm = {txtDateFrom : {$setValidity: function (var1,var2){ return true }}};
 Spyon( $scope.filterOrdersForm.txtDateFrom,"$setValidity");