2016-06-17 2 views
0

uploadCtrl.jsКак я могу вставить сторонний модуль AngularJS в модульный тест?

'use strict'; 
angular.module('app.controllers').controller('UploadCtrl', ['$scope', 'FileUploader', 
    function ($scope, FileUploader) { 
     $scope.uploader = new FileUploader(); 
     $scope.upload = function() { 
      // Do some validation of form fields before submitting to server here... 
      $scope.success = true; 
     }; 
    }] 
); 

uploadCtrlSpec.js

'use strict'; 
describe('UploadCtrl', function() { 
    var scope, controller, FileUploader, UploadCtrl; 
    beforeEach(module('app.controllers')); 
    beforeEach(module('angularFileUpload')); 
    beforeEach(inject(function (_FileUploader_, $rootScope, $controller) { 
     scope = $rootScope.$new(); 
     FileUploader = _FileUploader_; 
     controller = $controller; 

     UploadCtrl = controller('UploadCtrl', {$scope: scope, FileUploader: FileUploader}); 
    })); 

    it('verify upload success', function() { 
     scope.upload(); 
     expect(scope.success).toBeTruthy(); 
    }); 
}); 

Когда я пытаюсь запустить этот тест я получаю:

Error: [$injector:unpr] Unknown provider: FileUploaderProvider <- FileUploader 

Я попытался удалить все вплоть до очень очень чтобы исключить другие проблемы. Если я изменю значение «FileUploader» на FileUploaderX «Я получаю ту же ошибку и изменяется только неизвестное имя поставщика, поэтому проблема, похоже, находится внутри инъекции тестового блока. Также, если я изменю« beforeEach (модуль («angularFileUpload»)), «например,« beforeEach »(модуль (« angularFileUploadX »))« Я получаю сообщение об ошибке, что модуль не может быть найден, поэтому тестовый скрипт, похоже, правильно включает скрипт для модуля.

Работа приложения и я могу загрузить файл на мой сервер (не видны здесь, так как я удалил всю логику для начала FileUploader, чтобы исключить другие проблемы, кроме).

У кого-нибудь есть идеи?

Btw, я использую этот модуль: nervgh/angular-file-upload

Update: Я заметил, что если я удалю путь к модулю angularFileUpload (угловой файл-upload.js) в конфигурационном файле карма Это по-прежнему та же ошибка, которая отображается, но если я изменю имя модуля в beforeEach (в тестовом файле), он говорит, что его невозможно найти. Может ли быть конфликт с существующим модулем с тем же именем?

Error: [$injector:modulerr] Failed to instantiate module angularFileUploadX due to: 
    Error: [$injector:nomod] Module 'angularFileUploadX' is not available! You either misspelled the module name or forgot to load it. If registering a module ensure that you specify the dependencies as the second argument. 

ответ

0

Добавить зависимость от вашего файла karma.config.js.

например:

{ 
    files: [ 
     "path/to/FileUploader.js", 
     ... 
    ], 
    ... 
} 
+0

Как я уже упоминал в моем вопросе: «так что тест конф, кажется, в том числе и сценарий для модуля правильно», так что это не должно быть. Я включаю этот файл в конфигурацию https://github.com/nervgh/angular-file-upload/blob/master/dist/angular-file-upload.js (angular-file-upload.js), но это конечно, хранятся локально в структуре папок проекта. Или я чего-то не хватает? – KungWaz

Смежные вопросы