Cuando se llama al código de geolocalización, que se ve así:
navigator.geolocation.getCurrentPosition(onSuccess, onError);
Esto significa que usted está llamando y pasarlo funciones:
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
}
Entonces, si quieres espiar usando jazmín para devolver un valor, querrás llamar a la función de éxito usando el primer argumento de la llamada original como esta:
spyOn(navigator.geolocation,"getCurrentPosition").andCallFake(function() {
var position = { coords: { latitude: 32, longitude: -96 } };
arguments[0](position);
});
Si usted quiere hacer que parezca que se ha devuelto un error, te gustaría llamar a la función de error con el segundo argumento de la llamada original como esto:
spyOn(navigator.geolocation,"getCurrentPosition").andCallFake(function() {
arguments[1](error);
});
Editar a mostrar todo el ejemplo:
Ésta es la función que esté utilizando Jasmine a prueba:
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 es que sería en su archivo de especificaciones:
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');
});
});
});
En este punto, cuando se ejecuta la especificación, se le dirá que su servicio web que dio el código postal adecuado para la latitud y longitud que ha proporcionado si su servicio web trabaja apropiadamente.
Acepté su respuesta, el problema es que mi código sigue llamando al geocodificador original y no el espía –
Consulte la edición que agregué para obtener más aclaraciones. Espero que puedas ejecutar tus scripts de prueba de jazmín. :) –