我在Grails gsp中定義了一個Angular應用程序。 Modernizr庫包含在gsp級別。使用Modernizr進行角度單元測試
我需要在指令單元測試中使用庫。由於我沒有將Modernizr定義爲模塊,因爲它在Angular應用程序之外以及它內部使用,我如何將它注入到我的Angular單元測試中?
這裏是我的指令:
'use strict';
angular.module('simplify.directives').directive('img', ['$timeout', function ($timeout) {
return {
restrict: 'A',
link: function (elem, attrs) {
if (typeof Modernizr !== 'undefined' && !Modernizr.svg) {
$timeout(function(){
elem.attr('src', attrs.src.replace('.svg', '.png'));
});
}
}
};
}]);
這裏是我的單元測試代碼:
'use strict';
describe('Testing SVG to PNG directive', function() {
var scope,
elem;
beforeEach(module('app'));
beforeEach(module(function($provide) {
$provide.service('appConstants', function(){});
}));
beforeEach(inject(function($compile, $rootScope) {
elem = angular.element('<img ng-src="test-img.svg" />');
scope = $rootScope;
$compile(elem)(scope);
scope.$digest();
}));
it('Should swap svg for png image if svg is not supported', function() {
//force Modernizr.svg to be undefined here for purposes of the test
expect(elem.attr('src')).toBe('test-img.png');
});
});
什麼是最好的實踐方式做到這一點?
在你的指令中注入'$ window'並從'$ window.Modernizr'獲取modernizer。併爲您的測試模擬現代化器 – PSL