Po wywołaniu kodu geolokalizacji, wygląda to tak:
navigator.geolocation.getCurrentPosition(onSuccess, onError);
Oznacza to, że jesteś nazywając go i przechodząc funkcjonuje:
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
}
Tak więc, jeśli chcesz go śledzić za pomocą jaśminu zwracającego wartość, możesz wywołać funkcję sukcesu za pomocą pierwszego argumentu pierwotnego połączenia w następujący sposób:
spyOn(navigator.geolocation,"getCurrentPosition").andCallFake(function() {
var position = { coords: { latitude: 32, longitude: -96 } };
arguments[0](position);
});
Jeśli chcesz, aby wyglądał jak został zwrócony błąd, którą chcesz wywołać funkcję błędu przy użyciu drugiego argumentu oryginalnego rozmowy jak ta:
spyOn(navigator.geolocation,"getCurrentPosition").andCallFake(function() {
arguments[1](error);
});
Edytuj do pokazać pełny przykład:
jest to funkcja używasz Jasmine do testu:
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 to byłoby w pliku 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');
});
});
});
w tym momencie, po uruchomieniu spec, powie to, że serwis internetowy dał ci odpowiedni kod pocztowy na szerokości i długości geograficznej podałeś, czy serwis internetowy działa poprawnie.
Zaakceptowałem twoją odpowiedź, problem polega na tym, że mój kod ciągle wywołuje oryginalny geokoder a nie szpieg –
Zobacz edytowaną przeze mnie edycję, aby uzyskać więcej wyjaśnień. Mam nadzieję, że uda ci się uruchomić skrypty testu jaśminu. :) –