Ответ 1
Вам не хватает файла angular -mocks.js.
Я пытаюсь запустить службу по умолчанию unit test в моем проекте (взято из проекта Angular Seed на GitHub), но я продолжаю получать сообщение об ошибке "модуль не определен".
Я читал, что это может быть связано с порядком ссылок на файлы JavaScript, но я не могу его получить работать, поэтому, надеюсь, один из вас может помочь.
Моя конфигурация для теста выглядит так:
basePath = '../';
files = [
'Общественность/JavaScripts/Library/JQuery-1.8.2.js',
'Общественности/JavaScripts/Library/angular.js',
'Общественности/JavaScripts/Library/angular -. JS',
'Общественного/app.js',
'общественные/контроллеры/.js',
'общественные/directives.js',
'Общественного/filters.js',
'Общественного/services.js',
ЖАСМИН,
JASMINE_ADAPTER,
'Общественности/JavaScripts/Library/angular -mocks.js',
'test/unit/*. js'];autoWatch = true;
браузеры = ['Chrome'];
junitReporter = {outputFile: 'test_out/unit.xml', набор: 'unit' };
Служба выглядит следующим образом:
angular.module('myApp.services', []).
value('version', '0.1');
Тест выглядит следующим образом:
'use strict';
describe('service', function() {
beforeEach(module('myApp.services'));
describe('version', function() {
it('should return current version', inject(function(version) {
expect(version).toEqual('0.1');
}));
});
});
И ошибка при запуске теста через testacular такова:
ReferenceError: модуль не определен
Вам не хватает файла angular -mocks.js.
У меня была такая же проблема, и я понял, почему она не работает: Javascript javascript javascript должен быть указан до файла angular -mocks.js. Действительно, angular -mocks.js проверяет, загружен ли Jasmine, и только если он добавит функцию модуля в окно.
Вот извлечение из Angular кода Mocks:
(Редактировать после нескольких комментариев о "взломе", которые у меня были ниже: это всего лишь извлечение кода, это не то, что вам нужно написать сами, это уже есть!)
window.jasmine && (function(window) {
[...]
window.module = angular.mock.module = function() {
var moduleFns = Array.prototype.slice.call(arguments, 0);
return isSpecRunning() ? workFn() : workFn;
/////////////////////
[...]
};
В двух словах: Просто сообщите свой jasmine.js перед angular -mocks.js и отпустите.
Функция window.module
поставляется в angular-mocks.js и является сокращением для angular.mock.module
. Как упоминалось в документах, функция module
работает только с Jasmine.
Используя Testacular, следующий пример файла конфигурации загрузит angular-mocks.js
.
/** example testacular.conf.js */
basePath = '../';
files = [
JASMINE,
JASMINE_ADAPTER,
'path/to/angular.js',
'path/to/angular-mocks.js', // for angular.mock.module and inject.
'src/js/**/*.js', // application sources
'test/unit/**/*.spec.js' // specs
];
autoWatch = true;
browsers = ['Chrome'];
И, как было предложено в другом месте, вы можете запустить Testacular с протоколом отладки, чтобы узнать, какие сценарии загружены (вы также можете увидеть то же самое в инспекторе):
testacular --log-level debug start config/testacular.conf.js
angular.mock.inject
docs содержит довольно полный пример.
Мы используем 'module' без 'angular' в наших модульных тестах, и он отлично работает.
CoffeeScript:
describe 'DiscussionServicesSpec', ->
beforeEach module 'DiscussionServices'
beforeEach inject ... etc.
который компилируется в
JavaScript:
describe('DiscussionServices', function() {
beforeEach(module('DiscussionServices'));
beforeEach(inject(function ... etc.
Единственный раз, когда я вижу что-то вроде описанной вами ошибки, является то, что в файле testacular.conf.js файл angular -mocks.js не указан в разделе файлов, прежде чем спецификации попытаются использовать "модуль". Если я поместил его после моих тестов в список "файлы", я получаю
ReferenceError: Can't find variable: module
(Наши тесты проходят через PhantomJS)
Я включил angular -mocks.js в конфигурацию karma, но все еще получал ошибку. Оказывается, порядок важен в массиве файлов. (duh) Как и в заголовке html-документа, если script вызывает angular до его определения, и возникает ошибка. Поэтому мне просто пришлось включить приложение app.js после angular.js и angular -mocks.js.
Если вы используете Yeoman и его angular -генератор, вы, вероятно, получите эту ошибку. Особенно, когда вы делаете учебник (._.)
Я исправил его, скопировав файл angular -mocks.js, из каталога bower_components/angular -mocks в файл test/mock. Конечно, вы должны быть уверены, что ваш файл karma.conf.js настроен правильно.
Привет!
У меня была такая же проблема, когда я делал что-то вроде var module = angular.module('my',[])
. Мне нужно было убедиться, что он был окружен IIFE