Wenn Sie den Geolocation-Code aufrufen, sieht es so aus:
navigator.geolocation.getCurrentPosition(onSuccess, onError);
Dies bedeutet, dass Sie ihn aufrufen und ihm Funktionen übergeben:
function onSuccess(position) {
// etwas mit den zurückgegebenen Koordinaten machen
var myLat = position.coords.latitude;
var myLon = position.coords.longitude;
}
function onError(error) {
// etwas machen, wenn ein Fehler auftritt
}
Wenn Sie also möchten, dass Jasmine einen Wert zurückgibt, würden Sie die Erfolgsfunktion mit dem ersten Argument des ursprünglichen Aufrufs aufrufen, so:
spyOn(navigator.geolocation,"getCurrentPosition").andCallFake(function() {
var position = { coords: { latitude: 32, longitude: -96 } };
arguments[0](position);
});
Wenn Sie wollen, dass es aussieht, als wäre ein Fehler zurückgegeben worden, möchten Sie die Fehlerfunktion mit dem zweiten Argument des ursprünglichen Aufrufs aufrufen, so:
spyOn(navigator.geolocation,"getCurrentPosition").andCallFake(function() {
arguments[1](error);
});
Bearbeiten um vollständiges Beispiel anzuzeigen:
Dies ist die Funktion, die Sie mit Jasmine testen:
function GetZipcodeFromGeolocation(onSuccess, onError) {
navigator.geolocation.getCurrentPosition(function(position) {
// etwas mit den Positionsinfos machen wie z.B.
// einen Webservice mit einem Ajax-Aufruf aufrufen, um Daten zu erhalten
var zipcode = CallWebServiceWithPosition(position);
onSuccess(zipcode);
}, function(error) {
onError(error);
});
}
Dies würde in Ihrer Spezifikationsdatei sein:
describe("Postleitzahl aus Geolocation erhalten", function() {
it("soll die onSuccess-Funktion mit gültigen Daten ausführen", 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');
});
});
});
Zu diesem Zeitpunkt wird Ihnen der Test mitteilen, dass Ihr Webservice Ihnen die richtige Postleitzahl für die von Ihnen bereitgestellte Breiten- und Längengräbe gegeben hat, wenn Ihr Webservice ordnungsgemäß funktioniert.