Как заглушить библиотеку google.maps с помощью Sinon.JS? - PullRequest
2 голосов
/ 30 ноября 2011

Я использую библиотеку google.maps внутри такой модели Backbone (coffeescript):

class Route extends Backbone.Model

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

В своих тестах я всякий раз, когда пытаюсь создать экземпляр Route, я, очевидно, запускаюк вопросу.Как я могу заглушить google в моем тесте, чтобы это не вызывало этой проблемы?

Ответы [ 2 ]

4 голосов
/ 01 декабря 2011

Не много знаю о coffescript, но вы можете дать конструктору модели второй объект в качестве аргумента.

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

Тогда в функции инициализации вы должны написать:

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;
1 голос
/ 03 декабря 2011

Одна из главных ошибок при попытке написать тестируемый код - создать новые экземпляры в вашем объекте, который вы хотите протестировать.Существует шаблон, вызывающий Инверсия управления , который помогает писать тестируемый код.Хитрость в том, что все, что вы создадите в своем классе, будет введено в конструктор.Делая это таким образом, в своем тесте вы можете просто ввести простой макет или заглушку.Таким образом, ответ ProTom об этой модели.

Другое решение: в JavaScript мы можем легко переопределить каждый объект / функцию самостоятельно.Это означает, что вы можете создать свой собственный google.map DirectionsService.Между прочим, было бы лучше протестировать ваш код без каких-либо зависимостей от других библиотек, поэтому вы должны создать свой собственный объект Google с необходимыми вам методами.

...