У меня есть код, который представляет собой вилку ng-wrap
, которая была вдохновлена от this article. В принципе, он создает угловую услугу для глобальных переменных, внедряемых сторонними библиотеками, это подтверждение с помощью концепции angularjs инъекции зависимости. Но я борюсь за то, как проверить, была ли фактически преобразована сторонняя переменная в угловое обслуживание.Как проверить жасмин, если на самом деле создано угловое обслуживание?
вот код:
(function() {
'use strict';
angular
.module('blocks.wrapper', []);
})();
/* jshint ignore:start, -W101 */
// Inspired from http://www.bennadel.com/blog/2720-creating-and-extending-a-lodash-underscore-service-in-angularjs.htm
// Fork from https://github.com/bahmutov/ng-wrap
/* jshint ignore:end, +W101 */
(function() {
'use strict';
angular
.module('blocks.wrapper')
.provider('ngWrap', ngWrapProvider);
ngWrapProvider.$inject = ['$provide'];
/* @ngInject */
function ngWrapProvider($provide) {
/* jshint validthis:true */
this.wrapper = wrapper;
this.$get = function() {
return {'wrapper': wrapper};
};
///////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////// IMPLEMENTATION ///////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////
function wrapper(name, leaveGlobal) {
$provide.provider(name, function() {
if (typeof window[name] === 'undefined') {
throw new Error('Cannot find window.' + name);
}
var thing = window[name];
if (!leaveGlobal) {
delete window[name];
}
this.$get = function() {
return thing;
};
});
}
}
})();
Я вот мой тест спецификации до сих пор:
'use strict';
/* jshint -W117, -W030 */
describe('blocks.wrapper', function() {
var ngWrapProvider;
var ngWrap;
var mocks = {
windowProperty: {
testProperty: 'testValue'
}
};
beforeEach(module('blocks.wrapper', function (_ngWrapProvider_) {
ngWrapProvider = _ngWrapProvider_;
}));
beforeEach(inject(function (_ngWrap_) {
ngWrap = _ngWrap_;
}));
describe('ngWrapProvider', function() {
it('should successfuly be defined', inject(function() {
expect(ngWrapProvider).toBeDefined();
}));
it('should have a wrapper method', function() {
expect(ngWrapProvider.wrapper).toBeDefined();
});
});
describe('ngWrap', function() {
it('should successfuly be defined', function() {
expect(ngWrap).toBeDefined();
});
it('should have a wrapper method', function() {
expect(ngWrap.wrapper).toBeDefined();
});
});
it('should have ngWrapProvider.wrapper & ngWrap.wrapper point to the same function', function() {
expect(ngWrapProvider.wrapper).toEqual(ngWrap.wrapper);
});
describe('wrapper method', function() {
it('should throw an error when window.property is undefined', function() {
expect(function() { ngWrapProvider.wrapper('_'); }).toThrow();
expect(function() { ngWrap.wrapper('_'); }).toThrow();
});
});
});
Я относительно новым для тестирования, так что я, вероятно, делать это все неправильно. И хотя, да, все тестовые спецификации выше, но я изо всех сил пытаюсь проверить, что window.property
был фактически преобразован в угловое обслуживание.
Вот мои попытки до сих пор:
describe('wrapper method', function() {
...
it('should convert window.property to an angular service', inject(function($injector) {
window._ = mocks.windowProperty;
ngWrapProvider.wrapper('_');
$injector.invoke(ngWrapProvider);
expect(angular.injector().has('_')).toBeTruthy();
}));
});
выше дает ошибку: Error: [ng:areq] Argument 'fn' is not a function, got ngWrapProvider
при попытке удалить строку с $ инжектором полностью, то expect(angular.injector().has('_')).toBeTruthy();
всегда возвращает ложь.
У меня есть идея всего $ инжекторной вещь от this post