AngularJS модульное тестирование Карма - неизвестный поставщик - PullRequest
1 голос
/ 23 апреля 2019

Я пытаюсь настроить модульные тесты в нашем устаревшем приложении 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 были должным образом преобразованы. Некоторая помощь в этом была бы оценена

1 Ответ

0 голосов
/ 23 апреля 2019

Я думаю, что вам нужно внедрить основной модуль перед внедрением сервиса. Возможно, что-то подобное поможет:

describe('Service Tests', function () {
    beforeEach(module('app'));
    var _generalUtilsFactory;

    beforeEach(inject(function (generalUtilsFactory) {
        _generalUtilsFactory = generalUtilsFactory
    }));
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...