Я пытаюсь установить тайм-аут в своем контроллере, чтобы, если ответ не получен в 250 мс, он должен выйти из строя. Я установил, чтобы мой unit test имел тайм-аут 10000, чтобы это условие было выполнено, может ли кто-нибудь указать мне в правильном направлении? (EDIT Я пытаюсь достичь этого, не используя службу $http, которую я знаю, обеспечивает функциональность тайм-аута)
(EDIT - мои другие юнит-тесты потерпели неудачу, потому что я не призывал к ним timeout.flush, теперь мне просто нужно получить сообщение о тайм-ауте, когда обещание undefined возвращается обещаниемService.getPromise(). Я удалил ранний код из вопроса).
promService (обещание - это переменная набора тестов, позволяющая мне использовать другое поведение для обещания в каждом наборе тестов до применения, например, отклонять в одном, успех в другом)
mockPromiseService = jasmine.createSpyObj('promiseService', ['getPromise']);
mockPromiseService.getPromise.andCallFake( function() {
promise = $q.defer();
return promise.promise;
})
Контроллер, который тестируется -
$scope.qPromiseCall = function() {
var timeoutdata = null;
$timeout(function() {
promise = promiseService.getPromise();
promise.then(function (data) {
timeoutdata = data;
if (data == "promise success!") {
console.log("success");
} else {
console.log("function failure");
}
}, function (error) {
console.log("promise failure")
}
)
}, 250).then(function (data) {
if(typeof timeoutdata === "undefined" ) {
console.log("Timed out")
}
},function( error ){
console.log("timed out!");
});
}
Тест (обычно я разрешаю или отвергаю обещание здесь, но не устанавливая его, я имитирую таймаут)
it('Timeout logs promise failure', function(){
spyOn(console, 'log');
scope.qPromiseCall();
$timeout.flush(251);
$rootScope.$apply();
expect(console.log).toHaveBeenCalledWith("Timed out");
})