2016-01-19 84 views
0
$scope.login = function(){ 

    api.getToken($scope.username, $scope.password, function(){ 

    $scope.loggedIn = true; 

    }); 
}; 

it('should work', function(){ 
    scope.login(); 
    expect(scope.loggedIn).toBe(true); // fails 
}); 

我該如何測試這個功能?對scope.loggedIn的測試失敗,因爲它仍然是false噶如何測試這個角碼?

+1

是,所有的測試代碼?您需要模擬'api.getToken'並解決它以將登錄設置爲true。 – codemonkey

+0

我該怎麼做? – userqwert

+0

如果您在角度測試中查找文檔,您會發現對「spyOn」的引用。這就是你需要使用的。 – codemonkey

回答

1

如果你的API使得HTTP請求,你可以用$ httpBackend嘲笑HTTP調用 https://docs.angularjs.org/api/ngMock/service/ $ httpBackend

是這樣的:

var $httpBackend; 

beforeEach(inject(function($injector){ 
    $httpBackend = $injector.get('$httpBackend'); 
} 

it('should work', function(){ 

    $httpBackend.expect('POST', 'http://my-api/login').respond(200, { status: "ok" }); 
    scope.login(); 
    $httpBackend.flush(); 
    expect(scope.loggedIn).toBe(true); // fails 
}); 
+0

是的,api.getToken返回一個對象。你能否給我寫一個例子?由於api是我正在測試的函數的一個獨立實體,因此我正在努力解決這個問題。 – userqwert

+0

增加了一個例子 –

+0

這非常有幫助,謝謝! – userqwert