繁体   English   中英

如何使用Sinon.JS存根google.maps库?

[英]How to stub out google.maps library with Sinon.JS?

我在这样的Backbone模型中使用google.maps库(咖啡):

class Route extends Backbone.Model

  initialize: ->
    @directionsService = new google.maps.DirectionsService()

在测试中,每当我尝试实例化Route ,我显然遇到了问题。 如何在测试中存根google ,以免引起此问题?

关于coffescript的知识不多,但是您可以为模型构造函数提供第二个对象作为参数。

var mymodel = new Route({/*attributes*/}, {directionService: yourStub});

然后,在initialize函数中,您将编写:

initialize: function(atts, options) {
  this.directionService = options.directionService || new google.maps.DirectionsService();
}

现在,您可以对方向服务进行存根或对单个实例使用另一个服务(如果有)。

另一种方法是直接替换DirectionService:

var origService = google.maps.DirectionsService;
google.maps.DirectionsService = function() {/*your stub*/};
var route = new Route();
google.maps.DirectionsService = origService;

尝试编写可测试代码时的主要失败之一是在要测试的对象中创建新实例。 有一种模式称为“控制反转” ,可帮助编写可测试的代码。 诀窍在于,您将在类中创建的所有内容都将注入到构造函数中。 这样,在测试中,您只需注入一个简单的模拟或存根即可。 因此ProTom的答案就是这种模式。

另一个解决方案:在JavaScript中,我们可以轻松地自己重写每个对象/函数。 这意味着您可以创建自己的google.map DirectionsService。 顺便说一句,最好在不依赖其他库的情况下测试代码,因此您应该使用所需的方法创建自己的google对象。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM