2014-01-23 64 views
2

在angularjs一個典型的app.js文件是這樣的:

var phonecatApp = angular.module('phonecatApp', [ 
    'ngRoute', 
    'phonecatControllers' 
]); 

phonecatApp.config(['$routeProvider', 
    function($routeProvider) { 
    $routeProvider. 
     when('/phones', { 
     templateUrl: 'partials/phone-list.html', 
     controller: 'PhoneListCtrl' 
     }). 
     when('/phones/:phoneId', { 
     templateUrl: 'partials/phone-detail.html', 
     controller: 'PhoneDetailCtrl' 
     }). 
     otherwise({ 
     redirectTo: '/phones' 
     }); 
    }]); // the example is taken from the angularjs tutorial 

你將如何單元測試這個文件?

這是有點前衛和百分比覆蓋導向。首先測試它有意義嗎? 我認爲是的,因爲當瀏覽到某個網址時,我想確保使用正確的路線。

注意:這個問題不僅是關於測試$ routeProvider,而且關於app.config()。

謝謝!

+0

這個問題回答了我的想法。我有同樣的問題,但重新配置爲「測試routeChange事件」http://stackoverflow.com/questions/19093010/jasmine-unit-test-case-for-routechangestart-in-angularjs – FlavorScape

回答

1

您在問如何測試配置設置。

問這是否有意義?那麼..我認爲這是有爭議的。我多次問自己這個問題。 我們如何確保我們用作配置的值是正確的?

即使配置是一個流暢的配置,我不確定稱它爲「單元測試」是正確的。

我認爲你不應該擔心「測試」配置設置,因爲「測試」配置會導致冗餘和遞歸。讓我進一步詳細說明我的意思。當添加的配置設置,如:

when('/phones', { 
     templateUrl: 'partials/phone-list.html', 
     controller: 'PhoneListCtrl' 
     }). 

測試將看到,對於路線/phones您將使用controller'PhoneDetailCtrl'的唯一的事情。這樣做不會測試任何東西,只是驗證一些字符串對是正確的。這會引起遞歸問題。通過「驗證」字符串值,您如何知道「測試」配置的人正在使用正確的值?你不應該測試測試嗎?

從技術角度回答你的問題..如何測試..我不知道如何測試routeProvider的配置,但我認爲你不應該這樣做。

+0

所以,我的app.run是在那裏也有一些routechangestart處理程序等等,我不喜歡這個課程讓我的覆蓋報告陷入困境。實際上,(儘管不太可能)測試路由器將確保沒有角度變化破壞,而不僅僅是配置值。說你升級了,他們把控制器A稱爲別的東西?它會中斷。另外,像通配符運算符這樣的處理程序中有邏輯的情況。 '/ detail /:通配符*'或特定的參數。 – FlavorScape