Введение задержки в Javascript легко сделать с помощью API setTimeout, подробности здесь .Вы не указали, используете ли вы фреймворк, такой как Angular, поэтому ваш код может немного отличаться от того, что у меня есть ниже.
Не похоже, что вы используете Observables или Promises для упрощения обработки асинхронного кода.,У Jasmine 2 есть обратный вызов «done», который может быть полезен для этого.Примерно так может работать:
it( "my test", function(done) {
let successHandler = jasmine.createSpy();
spyOn(LocationService, 'getLocation').and.callFake(function(successHandler, errorHandler) {
setTimeout(function() {
const location = {...};
successHandler(location);
}, 1000); // wait for 1 second
})
// Now invoke the function under test
functionUnderTest(/* location data */);
// To test we have to wait until it's completed before expecting...
setTimeout(function(){
// check what you want to check in the test ...
expect(successHandler).toHaveBeenCalled();
// Let Jasmine know the test is done.
done();
}, 1500); // wait for longer than one second to test results
});
Однако мне не ясно, почему добавление тайм-аутов было бы полезно для вашего тестирования.:)
Надеюсь, это поможет.