2016-06-08 50 views
1

我正在使用其他人寫的angularjs應用程序。我一直在這個應用程序的一邊,另一邊,增加了功能。我有可測試的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應用程序成爲可能?如果這是一個糟糕的單元測試,那麼更好的一個會是什麼?

回答

0

自從這篇文章後,我已經走過了很長一段路。沒有設置端點並不是什麼大問題。我現在正在以不同的方式設置它,並在整個應用程序中共享。

我一直在試圖理解爲什麼在運行茉莉花測試時不會執行http調用。

因此,似乎任何angularjs應用程序都是可測試的。但是,在測試模式下,http請求不會被設計執行。現在我清楚地知道這是爲什麼。我們不想在測試模式下發布並將數據放入api。原因是UI測試不應該測試後端api。

作爲編寫測試的開發人員,beforeEach語句必須使用$ httpBackend和ngMock來模擬應用程序期望的響應。該測試旨在確保應用程序按照您期望的方式進行反應。

相關問題