Я пытаюсь настроить тесты для своего проекта Angular.js, но продолжаю получать сообщение «$injector:nomod, результат модуля недоступен! Вы либо ошиблись…». Я уверен, что включаю модуль «результат» в массив «файлы» внутри «karma.config.js», в основном это выглядит так:
files: [
'../javascripts/jquery-2.1.4.min.js',
'../jquery-ui/jquery-ui.min.js',
'../D3/d3.js',
'libs/angular.min.js',
'libs/angular-route.min.js',
'libs/angular-animate.min.js',
'libs/selectize.js',
'libs/angular-selectize.js',
'libs/angular-mocks.js',
'simulator.js',
'*.js',
'services/**/*.js',
'qa/tests-*.js'
],
...
Сначала я подумал, что порядок основного модуля: «симулятор» (определенный внутри файла «simulator.js») неверен, поэтому я специально переместил его вверх, перед другими модулями, как рекомендует следующий поток stackoverflow:
модуль Angular недоступен в тестовом прогоне Karma Jasmine
Это не помогло. Затем я попытался убедиться, что файлы импортируются в том же порядке, что и в файле основной записи моих угловых приложений (за исключением angular-mocks.js и qa/tests-*.js), импортируя каждый отдельный файл вместо использования подстановочные знаки, но безуспешно.
Жасмин определенно входит в тестовые файлы, но натыкается на строку, где я пытаюсь импортировать модуль «результат»:
describe('simulator.chartService', function() {
var chartService;
var graphConfig;
console.log("instantiating module result");
beforeEach(module('result'));
console.log("finished instantiating");
beforeEach(inject(function($injector) {
graphConfig = $injector.get('graphConfig');
chartService = $injector.get('chartService');
}));
it('should be created', function() {
expect(chartService.calcColors(10)).not.toBeNull();
});
});
Итак, я вижу, что ошибка возникает между двумя операторами console.log().
Я подозреваю, что еще что-то может быть не так с порядком моих файлов внутри массива "файлы" в "karma.config.js". У меня есть основной модуль «симулятор», который зависит от других модулей:
angular.module('simulator', ['ngRoute','ngAnimate','selectize','newexp2','newexp','login','edit','exps', 'result','templates','commons'])
Модули 'newexp2', 'newexp', 'логин', 'редактирование', 'exps', 'result', 'templates' зависят от модуля 'commons'.
Как правильно импортировать взаимозависимые модули внутри массива «файлы»? Достаточно ли разместить основной модуль «simulator.js» выше всех остальных, или мне также нужно разместить все остальные модули перед «commons.js»?
Еще одно мое подозрение заключается в том, что версия библиотеки angular.js, которую я скачал с официального веб-сайта angular, «angular-mocks.js», может быть несовместима с другими модулями, которые я использую. Раньше у меня была такая проблема с файлом angular-animate.js.
Пока я окружаю свой тестовый код $(function(){...})
(и все остальные мои модули окружены им), он не генерирует ошибку при импорте модуля result
, поэтому я начинаю видеть два оператора console.log()
без ошибки между ними, однако это выдает какую-то неизвестную ошибку, из-за которой я вообще не могу вызвать часть it
, тогда как, когда я не окружаю ее $(function(){...})
, тест it
вызывается, но импорт модуля result
завершается ошибкой.
Пока я в значительной степени застрял и не знаю, куда двигаться и что попробовать. Любое предложение будет принято с благодарностью.
simulator
— это отсутствующий модуль? Возможно, это один из других модулей, которые вы вводите. - person Explosion Pills   schedule 28.10.2015grunt
в терминале, он показывает ошибку ч/б двумя операторамиconsole.log()
. Я перехожу по ссылке с ошибкой, и она показывает следующее$injector:modulerr
:Failed to instantiate module result due to: [$injector:nomod] http://errors.angularjs.org/1.4.7/$injector/nomod?p0=result I/<@http://localhost:9876//home/nikita/workspace/simulator/public/angular/libs/angular.min.js?b6b56d0e096efc26e09d6cf2cd37aac6123cc346:6:416 de/workFn@http://localhost:9876/base/libs/angular-mocks.js?e...
Переход по ссылке далее дает мне$injector:nomod
:Module 'result' is not available! ...
- person Nikita Vlasenko   schedule 28.10.2015result
? - person Explosion Pills   schedule 28.10.2015result.js
, который находится в той же папке, что и файлkarma.config.js
, поэтому я могу либо импортировать его вручную, так же, как я делаю сsimulator.js
, либо указать его с помощью подстановочного знака:*.js
, что я и делаю сразу послеsimulator.js
файл импортируется. - person Nikita Vlasenko   schedule 28.10.2015$(function(){ angular.module('result', ['commons']) ...
- person Nikita Vlasenko   schedule 28.10.2015angular.module('simulator', ['ngRoute','ngAnimate','selectize','newexp2','newexp','login','edit', 'exps', 'result','templates','commons'])
- person Nikita Vlasenko   schedule 28.10.2015$(function(){...});
, то каким-то образом отображаются два оператораconsole.log()
, и ошибка модуля не генерируется: он перестает двигаться дальше, даже не вызывая частьit
. В консоли я начинаю видеть, что он просто терпит неудачу без каких-либо объяснений. Без переноса он вызывает частьit
и все промежуточные частиconsole.log()
. - person Nikita Vlasenko   schedule 28.10.2015