javascript – 如何从茉莉花中的geolocator伪造回电话

前端之家收集整理的这篇文章主要介绍了javascript – 如何从茉莉花中的geolocator伪造回电话前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个函数调用geolocator,我不知道如何测试这个功能.我已经尝试间谍地理位置并返回假数据,但没有成功,原来的功能仍然使用,所以我必须等待,我不能使用模拟数据.
// this doesn't work        
var navigator_spy = spyOn( navigator.geolocation,'getCurrentPosition' ).andReturn( {
    coords : {
        latitude : 63,longitude : 143
    }
} );

我该怎么做?

解决方法

当你调用地理位置代码时,它看起来像这样:
navigator.geolocation.getCurrentPosition(onSuccess,onError);

这意味着你正在调用它并传递它的功能

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
  }

所以,如果你想使用茉莉花返回一个值来监视它,你可以使用原始调用的第一个参数调用成功函数,如下所示:

spyOn(navigator.geolocation,"getCurrentPosition").andCallFake(function() {
         var position = { coords: { latitude: 32,longitude: -96 } };
         arguments[0](position);
  });

如果你想让它看起来像一个错误返回,你想使用原始调用的第二个参数调用错误函数,"getCurrentPosition").andCallFake(function() { arguments[1](error); });

编辑显示完整示例:

这是您使用Jasmine测试的功能

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);
        });
  }

这将在你的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');
              });
        });
  });

在这一点上,当您运行规范时,如果您的Web服务正常工作,它会告诉您,您的Web服务为您提供的纬度和经度提供了正确的邮政编码.

猜你在找的JavaScript相关文章