Quando si chiama il codice di geolocalizzazione, sembra che questo:
navigator.geolocation.getCurrentPosition(onSuccess, onError);
Ciò significa che si sta chiamando e passandolo funzioni:
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
}
Quindi, se volessi spiarlo usando jasmine restituendo un valore, vorrai chiamare la funzione success usando il primo argomento della chiamata originale in questo modo:
spyOn(navigator.geolocation,"getCurrentPosition").andCallFake(function() {
var position = { coords: { latitude: 32, longitude: -96 } };
arguments[0](position);
});
Se si voleva far sembrare un errore è stato restituito, che ci si vuole chiamare la funzione di errore usando il secondo argomento della chiamata originale in questo modo:
spyOn(navigator.geolocation,"getCurrentPosition").andCallFake(function() {
arguments[1](error);
});
Modifica a Visualizza tutti i esempio:
Questa è la funzione che si sta utilizzando Jasmine di prova:
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 è sarebbe nel file spec:
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');
});
});
});
A questo punto, quando si esegue la specifica, vi dirà che il vostro servizio web ti ha dato il codice postale corretto per la latitudine e la longitudine Lei forniti se il vostro servizio web funziona correttamente
Ho accettato la tua risposta, il problema è che il mio codice continua a chiamare il geocoder originale e non la spia –
Si prega di consultare la modifica che ho aggiunto per ulteriori chiarimenti. Spero che tu sia in grado di eseguire i tuoi script di test sui gelsomini. :) –