2014-01-14 113 views
2

我是AngularJS的新手。我正在用Jasmine創建一些單元測試。我試圖瞭解如何測試鏈接是否被點擊。舉例來說,我有如下記載:AngularJS +測試錨元素點擊

it('should click the link', inject(function ($compile, $rootScope) { 
    var element = $compile('<a href="http://www.google.com" >Google.com</a>')($rootScope); 
    $rootScope.$digest(); 

    expect(true).toBeTruthy(); 
})); 

請注意,我不想測試,如果瀏覽器窗口被重定向到谷歌。有時候我的鏈接會將用戶重定向到一個url。有時他們會觸發一些JavaScript。無論哪種方式,我試圖測試鏈接是否被點擊或不。最後,我將添加一些行爲來確保跳過鏈接的默認行爲。考慮到測試驅動開發的想法,我需要測試以確保當前正在檢測鏈接點擊。

我如何在Jasmine中測試AngularJS?

謝謝

回答

2

這不會是一個AngularJS單元/集成測試。這更像是端到端測試。 如果你想將它寫了「角路」,你可以寫這樣的:

在視圖:

<p ng-click='redirectToGoogle()'>Google.com</p> 

在控制器:

$scope.redirectToGoogle = function(){ 
    $location.path('http://www.google.com'); 
}; 

並在測試:

describe('Redirect', function(){ 

    var location, scope, rootScope, controller; 

    beforeEach(function(){ 
    inject(function ($injector){ 
     rootScope = $injector.get('$rootScope'); 
     scope = rootScope.$new(); 

     controller = $injector.get('$controller')("nameOfYourController", {$scope: scope}); 

     location = $injector.get('$location'); 
    }); 
    }); 

    it('should redirect to google', function){ 
    spyOn(location, 'path'); 

    scope.redirectToGoogle(); 

    expect(location.path).toHaveBeenCalledWith('http://www.google.com'); 
    }); 

});