Я пытаюсь проверить кучу Угловых Услуг, используя Карму, но он продолжает сталкиваться с ошибками. В основном у меня есть файлы под названием «APIHelper.js» и «Config.js». Внутри этих файлов я создал фабрики, а именно «APIHelper» и «Config» соответственно. Теперь у меня есть еще один файл «XFactory.js», который определяет другую фабрику, которая фактически использует «APIHelper» и «Config».Тестирование Угловой Фабрики (который использует другие услуги) с Кармой
Я тестировал фабрики APIHelper и Config, я знаю, как вводить простой завод и проверять его. Тем не менее, у меня возникли проблемы с тестированием этого «XFactory», который имеет другие зависимости.
Вот код APIHelper.js:
angular.module('Test').factory('APIHelper', function() {
appendContext:function(item, context){
//code here
}
});
Вот код для config.js
angular.module('TesterLib',[]).factory('Configuration', function() {
//code here
});
Вот код XFactory:
'use strict';
angular.module('Test').factory('XFactory', function ($q, $http, APIHelper, Config) {
function executeRequest(req) {
.....
.....
//make the http call.
var response = $http(convertedRequest);
var deffered= $q.defer();
response.then(function(resp){
context.response = response;
//Append the context to the body for easy access
APIHelper.appendContext(response.body,context);
deffered.resolve(response);
},function(resp){
//Create error
var error = {message:resp.body,code:resp.statusCode};
//Append the context to the error object
APIHelper.appendContext(error,context);
deffered.reject(error);
});
return deffered.promise;
}
return executeRequest;
});
function executeRequest(req) {
//Convert abstracted request to request's http request
var convertedRequest = convertHttpRequest(req);
//create a context to hold raw request and response
var context = new HttpContext();
context.request = req;
//make the http call.
var response = $http(convertedRequest);
var deffered= $q.defer();
response.then(function(resp){
var response = convertHttpResponse(resp);
context.response = response;
//Append the context to the body for easy access
APIHelper.appendContext(response.body,context);
deffered.resolve(response);
},function(resp){
var response = convertHttpResponse(resp);
context.response = response;
//Create error
var error = {message:response.body,code:response.statusCode};
//Append the context to the error object
APIHelper.appendContext(error,context);
deffered.reject(error);
});
return deffered.promise;
}
return executeRequest;
});
Вот тестовый код (это отлично работает при использовании для APIHelper или Config factory):
describe('Basic Injection Test', function() {
var scope = {};
var ctrl;
beforeEach(module('Test'));
it('should check if injection is being made correctly',function(){
var $injector = angular.injector(['Test']);
ctrl = $injector.get('XFactory');
expect(ctrl).to.be.ok;
});
});
Вот файлы я в том числе в karma.conf файле:
// list of files/patterns to load in the browser
files: [
'../angular.js',
'../../node_modules/angular-mocks/angular-mocks.js',
'../app.js',
'../factory/APIHelper.js',
'../factory/Config.js',
'../factory/XFactory.js',
'test.js'
],
ПРИМЕЧАНИЕ: app.js имеет следующее содержание:
var app = angular.module('Test',[]);
app.js просто используется чтобы помочь Карме найти тестовый модуль (до того, как он выбросил ошибку, чтобы модуль тестирования не был найден)
Я использую Karma для запуска тестов. Необходимые файлы были включены в целевой файл «files» файла karma.conf.js. Однако, когда я запускаю тесты, я получаю эту ошибку:
[$injector:unpr] Unknown provider: $qProvider <- $q <- XFactory
Даже если я каким-то образом удалить $ д и $ HTTP услуг, я все еще получаю эту ошибку в этом измененном виде:
[$injector:unpr] Unknown provider: APIHelperProvider <- APIHelper <- XFactory
Может ли кто-нибудь сказать мне, как исправить эту ошибку, а также объяснить, почему это происходит? Я новичок в Угловом модульном тестировании. Поэтому я действительно не знаю, как решить эту проблему. Помощь будет оценена :)
Это как определяется служба APIHelper (в APIHelper.js) angular.module ('Test'). Factory ('APIHelper', function() { // код здесь }); Значит, не определено ли это в тестовом модуле? Кроме того, фрагмент кода, который вы предоставили, где он должен быть включен в тестовый файл? – leMS
Хорошо, включая этот var $ injector = angular.injector (['ng', 'ngMock', 'Test']); ничего не меняет – leMS
Он все еще бросает '$ qProvider <- $ q <- XFactory'? Вы не разместили весь соответствующий код. Не очевидно, что файл, в котором загружен 'angular.module ('Test'). Factory ('APIHelper' ...'. И не очевидно, что он был загружен после 'angular.module ('Test, [. ..]) 'определение модуля - в противном случае он выдаст ошибку. – estus