Жасмин: создать шпион на оконные объекты, которые не существуют
Я создаю приложение cordova / phonegap вместе с AngularJS. В моем приложении я использую некоторые родные плагины от cordova, такие как плагин геолокации.
Во время моих тестов, эти плагины не доступны (потому что отсутствует телефонный разрыв), $window.plugins
возвращается undefined
в моих тестах. И, конечно же, $window.plugins.anotherPlugin
также не удается.
Поэтому я должен макетировать эти части для моих испытаний. В настоящее время я делаю это так
beforeEach(function() {
$window.plugins = {
anotherPlugin: {
foo: function() {}
}
};
});
Но что, если в будущем другая библиотека использует $window.plugins
пространство имен, и я перезаписываю его в своих тестах? Это сломало бы другие тесты. С помощью описанного выше способа мне нужно будет выполнить некоторую очистку после тестов, чтобы убедиться, что старые значения $window.plugins
установлены обратно. Я думаю, этот способ не очень чистый, и мне интересно, есть ли лучший способ сделать это с жасмином.
Итак, мой вопрос: как я могу шпионить за $window.plugins.anotherPlugin
создавая фиктивные функции с жасмином, не влияя на другие тесты, когда $window.plugins
не существует?
1 ответ
Вы должны загрузить модуль части, которую вы хотите протестировать, и сгенерировать фиктивный модуль, который предоставляет шпионы.
beforeEach(function () {
module('ModuleUnderTest', function($provide) {
var windowMock = {
plugins: {
anotherPlugin: jasmine.createSpyObj('anotherPlugin', ['foo', 'bar'])
}
};
// substitute all dependencies with mocks
$provide.value('$window', windowMock);
});
});
Осторожно, я не проверял код, но вы должны понять суть.