Wenn Sie den Geolocation-Code aufrufen, es sieht wie folgt aus:
navigator.geolocation.getCurrentPosition(onSuccess, onError);
Das bedeutet, dass Sie es sind aufrufen und es funktioniert:
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
}
Wenn Sie also mit Jasmin einen Wert ausspionieren wollten, sollten Sie die Erfolgsfunktion mit dem ersten Argument des ursprünglichen Aufrufs wie folgt aufrufen:
spyOn(navigator.geolocation,"getCurrentPosition").andCallFake(function() {
var position = { coords: { latitude: 32, longitude: -96 } };
arguments[0](position);
});
Wenn Sie es so aussehen wie ein Fehler zurückgegeben wurde, würden Sie anrufen möchten, die Fehlerfunktion unter Verwendung des zweiten Argument des ursprünglichen Aufruf wie folgt machen wollte:
spyOn(navigator.geolocation,"getCurrentPosition").andCallFake(function() {
arguments[1](error);
});
bearbeiten zu vollständiges Beispiel zeigen:
Dies ist die Funktion, die Sie Jasmine Test verwenden:
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 ist in der Spec-Datei wäre:
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');
});
});
});
An diesem Punkt, wenn Sie die Spezifikation ausführen, wird es Ihnen sagen, dass Ihre Web-Service, den Sie die richtige Postleitzahl für den Breiten- und Längen Sie, wenn Sie Ihre Web-Service geliefert hat Funktioniert einwandfrei.
Ich akzeptierte Ihre Antwort, das Problem ist, dass mein Code ruft den ursprünglichen Geocoder und nicht der Spion –
Bitte beachten Sie die Bearbeitung, die ich für weitere Erläuterungen hinzugefügt habe. Ich hoffe, dass Sie Ihre Jasmin-Testskripte ausführen können. :) –