Javascript 物体法的茉莉花试验

Javascript 物体法的茉莉花试验,javascript,jasmine,javascript-objects,Javascript,Jasmine,Javascript Objects,您好,我对Javascript和jasmine有点缺乏经验,我正在尝试为Javascript对象编写一些简单的测试 var谷歌地图={ 地理代码:功能(代码,fn){ var geocoder=new google.maps.geocoder(); 地理编码({ “地址”:代码 },功能(结果、状态){ if(status==google.maps.GeocoderStatus.OK){ fn(结果[0]。几何体。位置); }否则{ 警报(“全部丢失”); } }) }, 渲染:函数(LatLn

您好,我对Javascript和jasmine有点缺乏经验,我正在尝试为Javascript对象编写一些简单的测试

var谷歌地图={
地理代码:功能(代码,fn){
var geocoder=new google.maps.geocoder();
地理编码({
“地址”:代码
},功能(结果、状态){
if(status==google.maps.GeocoderStatus.OK){
fn(结果[0]。几何体。位置);
}否则{
警报(“全部丢失”);
}
})
},
渲染:函数(LatLng){
变量映射选项={
缩放:8,
中心:拉丁
}
map=new google.maps.map(document.getElementById('map-canvas'),mapOptions);
var marker=new google.maps.marker({
地图:地图,
职位:LatLng
});
}
};
-这是我的茉莉花手稿;我试图确保无论何时运行geocode函数,都会调用render函数

description(“googleMap.js的测试”,函数(){
它(“测试地理代码”,函数(){
var input=“哥伦布”;
spyOn(谷歌地图“渲染”);
地理编码(输入,googleMap.render);
expect(googleMap.render).tohaveBeenCall();
});
});

每当我运行这个程序时,我的specRunner返回一个错误,声称调用了expect声称的spy渲染,我有点困惑为什么它不会被调用。。。。这与我试图设置spy的方式有关,还是与我无法测试的javascript对象有关。我很难找到类似的例子

对象
google.maps.Geocoder
的方法
.geocode
异步的
因此,在检查回调函数是否执行时,您还没有得到响应,这意味着您的函数将不会被调用

如果您只想测试函数是否将被调用,则可以执行以下操作:

describe("Testing of googleMap.js", function() {
    it("Test GeoCode", function(done) {
        var input = "Columbus";
        googleMap.geoCode(input, function() {
            // here you know that your callback function was called
            done();
        });
    });
});
如果您仍想使用模拟功能,可以这样做(使用jasmine 2.0):


对于给定的代码块,如果没有调用回调函数,则会出现超时错误:

Error: Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL.

这是一个(带有一个模仿过的谷歌地理编码器)



这就是修复代码的方法。问题是:这样做合理吗?

在单元测试中,您应该将代码与其他资源(如google geocoder)分开进行测试。因此,在这种情况下,最好模拟geocoder对象,并测试模拟是否使用正确的参数调用。

谢谢,单元测试绝对是一种不同的思维方式
Error: Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL.