2016-01-19 49 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