Я пытаюсь настроить модульные тесты в нашем устаревшем приложении AngularJS. Я использую стандартную карму вместе с angular-mock для настройки тестовых случаев. Но у меня возникают проблемы с Unknown provider
, когда я пытаюсь внедрить некоторые службы и фабрику. Мой karma.conf выглядит примерно так (для краткости я убрал много вещей)
module.exports = function(config) { config.set({
basePath: '',
// frameworks to use
// available frameworks: https://npmjs.org/browse/keyword/karma-adapter
frameworks: ['jasmine'],
// list of files / patterns to load in the browser
files: [
'./node_modules/angular/angular.js',
"http://cf._____.com/content/myfootprints/js/priorityqueue.js",
"http://cf._____.com/content/myfootprints/js/ng-flow-standalone.js",
INCLUDED ALL THE DEPENDENCIES HERE
'./node_modules/angular-mocks/angular-mocks.js',
'./static/js/app/main.js',
'./static/tests/**/*.js'
]
preprocessors: {
'./static/js/app/**/main.js':['webpack', 'sourcemap'],
'./static/js/app/**/*.js':['webpack', 'sourcemap'],
},
В нашем приложении есть main.js, который импортирует все контроллеры и фабрики в приложение, используя imports
и requireDir
. Это выглядит примерно так
const requireDir = require('webpack-requiredir');
import './isocurrency.js';
import './myfp_uirouter.js';
import './infobubble.js';
// other imports
requireDir(require.context('./controllers', true, /.*\.js$/))
requireDir(require.context('./directives', true, /.*\.js$/))
requireDir(require.context('./factories', true, /.*\.js$/))
requireDir(require.context('./filters', true, /.*\.js$/))
У меня есть файл с юнит-тестами, который выглядит примерно так
describe('Unit test file, function(){
var generalUtilFactory;
beforeEach(inject(function($injector){
generalUtilFactory = $injector.get('generalUtilsFactory'); <--- getting unknown provider
// Also tried to inject it in
//via function($rootScope,... _generalUtilFactory_)
}));
Other code
.
.
.
.
});
Теперь у меня есть общая фабрика утилит, которая импортируется через main.js и регистрируется в модуле приложения. Я проверил, чтобы увидеть это в отладчике. Похоже, это
angular.module('app').factory('generalUtilsFactory', ['$timeout', '$filter', 'FileSaver', 'Blob', function($timeout, $filter, FileSaver, Blob) {
var generalUtilsFactory = {};
generalUtilsFactory.getKeys = function(o){
Я не совсем уверен, что здесь происходит. Все необходимые файлы были включены, и все es6 были должным образом преобразованы. Некоторая помощь в этом была бы оценена