我想测试我的谷歌地图地理编码器指令。在那里,我有一个我已经存根的地理编码构造函数:
...
link: function(scope) {
var map,
geocoder,
myLatLng,
mapOptions = {
zoom: 1,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
geocoder = new google.maps.Geocoder();
map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions);
geocoder.geocode({'address': 'New York'}, function(results, status) {
myLatLng = new google.maps.LatLng(results[0].geometry.location.lat(),
results[0].geometry.location.lng());
}});
}
我的存根码:
MapsGeocoderStub = sinon.stub();
$window.google = {
maps: {
Geocoder: MapsGeocoderStub
}
};
我想测试geocode.geocoder()
是否已被调用。因此,我认为我需要告诉存根它有这个方法,它通常由构造函数google.maps.Geocoder()
创建。
无论如何都是正确的方法吗?
答案 0 :(得分:1)
你可以参加考试:
var geocodeInstance = {
geocode: sinon.spy()
};
$window.google = {
maps: {
Geocoder: sinon.stub().returns(geocodeInstance);
}
};
所以在这里你说你的新$ window.google.maps.Geocoder()返回geocodeInstance,它有一个方法地理编码。我也使用sinon.spy(),因为你只想测试它被调用。它也可以是一个存根。
后来:
expect(geocodeInstance.geocode).calledOnce;
我用过期待,因为这是我用来编写测试的方式。 也可以尝试更改你的指令并注入$ window并执行:
geocoder = new $window.google.maps.Geocoder();