我有一个可测试的angularjs应用程序吗?

时间:2016-06-08 20:12:36

标签: angularjs unit-testing

我正在使用别人写的angularjs应用程序。我一直在这个应用程序的一边,而另一边,添加功能。

我是angularjs的新手,也是单元测试的新手。我已经为这个应用程序编写了50多个单元测试,据我所知,这样做的主要好处是找到代码中的不一致并修复它们然后编写单元测试。

我的角度应用程序主要由单个控制器内部的函数组成:

$scope.getDataDoSomethingWithIt = function()
    {
      var url = $scope.endpoint + "my_hard_coded_url";
      methodInAnotherFileThatMakesTheXHRRequest($http, url, "PATCH", mainData.adminToken, mainData.userToken, null, function(response) {
      if (response.status == 200){
            $scope.callSomeOtherMethod();
            $scope.addMessage = "Successfully did something.";
            $scope.isMessage = true;
      }else{

            $scope.addError = "Whoops!  There was an error";
            $scope.isError = true;
        }

      });
    };

我完全不知道如何针对这样的方法有意义地编写单元测试。主要是因为$scope.endpoint在更改$watch时设置了mainData.userToken

这是我现在的单元测试之一的完美示例:

describe('getDataDoSomethingWithIt', function () {
        it('addMessage should not equal null and addError should be empty string.', function () {
            var controller = $controller('myController', { $scope: $scope });
            $scope.getDataDoSomethingWithIt();
            expect($scope.addMessage).not.toBe(null);
            expect($scope.addError).toBe('');
        }); 
    });

这有什么用途?是什么让可测试的angularjs应用?如果这是一个糟糕的单元测试,那会有什么更好的呢?

1 个答案:

答案 0 :(得分:0)

自从这篇文章以来,我已经走了很长的路。没有设置端点并不是什么大问题。我现在和在应用程序中共享的位置设置不同。

我一直试图理解为什么在运行jasmine测试时不会执行http调用。

所以似乎任何angularjs应用程序都是可测试的。但是,在测试模式下,http请求不会被设计执行。我现在非常清楚为什么会这样。我们不想在测试模式下发布数据并将数据放入api。原因是UI测试不应该测试后端api。

作为编写测试的开发人员,beforeEach语句必须使用$ httpBackend和ngMock来模拟应用程序所期望的响应。该测试旨在确保应用程序以您期望的方式做出反应。