Khi bạn gọi mã geolocation, nó trông như thế này:
navigator.geolocation.getCurrentPosition(onSuccess, onError);
Điều này có nghĩa rằng bạn đang gọi nó và đi qua nó có chức năng:
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
}
Vì vậy, nếu bạn muốn theo dõi nó bằng cách sử dụng hoa nhài trả về một giá trị, bạn muốn gọi hàm thành công bằng cách sử dụng đối số đầu tiên của cuộc gọi ban đầu như sau:
spyOn(navigator.geolocation,"getCurrentPosition").andCallFake(function() {
var position = { coords: { latitude: 32, longitude: -96 } };
arguments[0](position);
});
Nếu bạn muốn làm cho nó trông giống như một lỗi được trả lại, bạn muốn gọi hàm lỗi bằng cách sử dụng số thứ hai của cuộc gọi ban đầu như thế này:
spyOn(navigator.geolocation,"getCurrentPosition").andCallFake(function() {
arguments[1](error);
});
Sửa để hiển thị đầy đủ ví dụ:
Đây là chức năng bạn đang sử dụng Jasmine để kiểm tra:
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 là sẽ trong file spec của bạn:
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');
});
});
});
Tại thời điểm này, khi bạn chạy spec, nó sẽ cho bạn biết rằng dịch vụ web của bạn đưa cho bạn mã zip thích hợp cho các vĩ độ và kinh độ bạn cung cấp nếu dịch vụ web của bạn làm việc cẩn thận.
Tôi chấp nhận câu trả lời của bạn, vấn đề là mã của tôi tiếp tục gọi bộ mã hóa địa lý gốc và không phải là gián điệp –
Vui lòng xem chỉnh sửa tôi đã thêm để làm rõ thêm. Tôi hy vọng bạn có thể chạy kịch bản thử nghiệm hoa nhài của mình để chạy. :) –