При вызове геолокации код, он выглядит следующим образом:
navigator.geolocation.getCurrentPosition(onSuccess, onError);
Это означает, что вы вызываете его и передавая его функции:
function onSuccess(position) {
// do something with the coordinates returned
var myLat = position.coords.latitude;
var myLon = position.coords.longitude;
}
function onError(error) {
// do something when an error occurs
}
Итак, если вы хотите следить за ним, используя жасмин, возвращающий значение, вам нужно вызвать функцию успеха, используя первый аргумент исходного вызова, например:
spyOn(navigator.geolocation,"getCurrentPosition").andCallFake(function() {
var position = { coords: { latitude: 32, longitude: -96 } };
arguments[0](position);
});
Если вы хотите, чтобы она выглядела как была возвращена ошибка, вы хотите вызвать функцию ошибки, используя второй аргумент исходного вызова, как это:
spyOn(navigator.geolocation,"getCurrentPosition").andCallFake(function() {
arguments[1](error);
});
Edit к показать полный пример:
Это функция, которую вы используете для Жасмин тест:
function GetZipcodeFromGeolocation(onSuccess, onError) {
navigator.geolocation.getCurrentPosition(function(position) {
// do something with the position info like call
// an web service with an ajax call to get data
var zipcode = CallWebServiceWithPosition(position);
onSuccess(zipcode);
}, function(error) {
onError(error);
});
}
Th это будет в файле спецификации:
describe("Get Zipcode From Geolocation", function() {
it("should execute the onSuccess function with valid data", function() {
var jasmineSuccess = jasmine.createSpy();
var jasmineError = jasmine.createSpy();
spyOn(navigator.geolocation,"getCurrentPosition").andCallFake(function() {
var position = { coords: { latitude: 32.8569, longitude: -96.9628 } };
arguments[0](position);
});
GetZipcodeFromGeolocation(jasmineSuccess, jasmineError);
waitsFor(jasmineSuccess.callCount > 0);
runs(function() {
expect(jasmineSuccess).wasCalledWith('75038');
});
});
});
В этот момент, когда вы запускаете спецификации, он скажет вам, что ваш веб-сервис дал вам правильный почтовый индекс для широты и долготы, которую вы предоставили, если ваш веб-сервис работает правильно.
Я принял ваш ответ, проблема в том, что мой код продолжает ссылаться на оригинальный геокодер а не шпионом –
См. изменение, которое я добавил для получения дополнительных разъяснений. Надеюсь, вы сможете запустить скрипты теста жасмина. :) –