javascript - 在 watch 破坏测试中使用 Jasmine 形式有效性进行 AngularJS 单元测试

标签 javascript angularjs unit-testing jasmine

我正在绞尽脑汁地试图找出我错过了什么,经过 5 个小时的谷歌搜索后,我并没有更接近答案,所以这是我的最后一次尝试。

我有一个 AngularJS 应用程序,在其中一个单元测试中,我正在检查 Controller 在 api 调用后是否显示一些数据。我的问题是我的 Controller 上有一个 watch 正在运行一些日期验证,它破坏了我的测试。如果我取下 watch ,测试就会顺利通过。我从测试中得到的错误如下:

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

这是我的 watch 正在调用的代码:

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

有人可以指出我缺少什么吗?我是否需要对测试做一些特殊的事情来处理这种情况?任何帮助将不胜感激。

最佳答案

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

请在其方法中尝试以下代码,

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

关于javascript - 在 watch 破坏测试中使用 Jasmine 形式有效性进行 AngularJS 单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26485286/

相关文章:

java - 在基于 TDD 的单元测试中处理 I/O

javascript - 防止多次点击时间隔排队

javascript - 在 Meteor 中使用 Jasmine 进行单元测试注册用户方法

javascript - gs 函数的定义是从 html 代码调用该函数时?

angularjs - 我如何从nodeJS触发Airflow Dag?

javascript - ngSwipe 和水平滚动

javascript - 访问 Angular.js 中的 JSON 文件

c# - 如何轻松替换 Microsoft Fakes 程序集?

javascript - 正则表达式字符集 - 以及它们包含的内容

javascript - ReactNative listview 初始状态