Ich habe Code, der einen Timer ausführt, wenn Benutzer aktiv ist und sendet und Ereignis, um die Sitzung am Leben zu halten.Wie schreibe ich einen Karma-Test für ein Versprechen
In der Steuerung habe ich etwas Code, um auf dieses Ereignis zu hören und die Sitzung zu aktualisieren.
Ich mag diesen Zuhörer testen
$scope.$on('Keepalive', function() {
//every 45 minutes make a call to refresh the session.
var promise = authService.keepAliveSession();
promise.then(function(userPreferenceData) {
dataTransfer.setUserPref(userPreferenceData);
}, function(error) {
console.log("promise error!!"+error);
});
});
mein Keep-Alive-Dienst ein Versprechen gibt, die nach dem httpbackend kehrt aufgelöst werden erhalten.
factory.keepAliveSession = function() {
var deferred = $q.defer();
req=...some stuff...
$http(req)
.success(
function (data, status) {
if (data.user) {
// Received data about the logged in user
deferred.resolve(factory.userPreferenceData);
} else {
// User is not authenticated; redirect to login
$window.location = data.redirect;
}
}
).error(function (error) {
// Error in oAuth refresh service
deferred.reject("Error in session keepalive"+ error);
});
return deferred.promise;
}
hier ist der Test
it('Test for keepalive', function() {
console.log('starting for keepalive...');
httpBackend.when('POST', "http://example.com/refreshSession").respond(getMocks().response.oAuthResponseExternal);
spyOn(authServiceMock, "keepAliveSession").and.callThrough();
spyOn(dataTransferMock, "setUserPref").and.callThrough();
rootScope.$broadcast('Keepalive');
expect(authServiceMock.keepAliveSession).toHaveBeenCalled();
rootScope.$digest;
expect(dataTransferMock.setUserPref).toHaveBeenCalled();
});
Die erste Behauptung ist erfolgreich, aber die zweite (nach dem Digest) ausfällt.
Wie kann ich das Versprechen erzwingen, gelöst oder abgelehnt zu werden? Muss ich irgendwie das $ q verspotten?
Hat diese Arbeit für Sie? – tasseKATT