簡體   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