Получение «Несоответствующий модуль анонимного определения () …», когда я пытаюсь выполнить тесты
Я пытаюсь настроить тестирование модуляции jasmineа кармы с помощью requirejs. Но каждый раз, когда я запускаю его, я получаю следующую ошибку:
Chrome 34.0.1847 (Mac OS X 10.9.2) ERROR Uncaught Error: Mismatched anonymous define() module: function (angular){ describe('Unit: Testing RequireJS', function(){ var ctrl; var scope; var rootScope; beforeEach(angular.mock.module('wsaApp')); beforeEach(angular.mock......ch
Ниже представлены файлы differenr: spec файл:
define(['angular'], function(angular){ describe('Unit: Testing RequireJS', function(){ var ctrl; var scope; var rootScope; beforeEach(angular.mock.module('wsaApp')); beforeEach(angular.mock.inject(function($rootScope){ scope = $rootScope.$new(); rootScope = $rootScope; })); }); });
main.js
- угловая директива, инкапсулирующая задержку для ng-change
- Угловая директива динамического шаблона Angular.js
- Как кэшировать сервис http get в angularjs
- AngularJS Несколько ng-приложений на странице
- Как создать сервер localhost для запуска проекта AngularJS
require.config({ paths: { /* ABC order */ 'angular': 'vendor/angular/1.2.0/angular.min' }, shim: { 'angular': { exports: 'angular' }, 'app/controllers': { deps: ['angular'] } } });
тест-main.js
// This creates an array of all the files that Karma finds with a suffix of // Test.js (eg utilsTest.js) to be added to the Require JS config below var tests = [], file; for (file in window.__karma__.files) { if (window.__karma__.files.hasOwnProperty(file)) { if(/spec\.js$/.test(file)) { tests.push(file); } } } requirejs.config({ baseUrl: '/base/public/javascripts/', // Karma serves files from /base/ paths: { /* ABC order */ 'angular': 'vendor/angular/1.2.1/angular.min' }, shim: { 'angular': { exports: 'angular' }, 'app/controllers': { deps: ['angular'] }, }, deps: tests, // add tests array to load our tests callback: window.__karma__.start // start tests once Require.js is done });
karma.conf.js
//Karma configuration module.exports = function (config) { config.set({ // base path, that will be used to resolve files and exclude basePath: '', // Fix for "JASMINE is not supported anymore" warning frameworks: ["jasmine", "requirejs"], // list of files / patterns to load in the browser files: [ 'vendor/angular/1.2.1/angular.js', 'jquery-1.7.1.min.js', 'test/spec/**/*.js', 'test/test-main.js' ], preprocessors: { 'app/**/*.js': 'coverage' }, // list of files to exclude exclude: ['app/main.js'], // test results reporter to use // possible values: dots || progress || growl reporters: ['progress', 'coverage'], coverageReporter : { type: 'html', dir: 'coverage/' }, // web server port port: 9876, // cli runner port runnerPort: 9100, // enable / disable colors in the output (reporters and logs) colors: true, // level of logging // possible values: LOG_DISABLE || LOG_ERROR || LOG_WARN || LOG_INFO || LOG_DEBUG logLevel: config.LOG_INFO, // enable / disable watching file and executing tests whenever any file changes autoWatch: false, // Start these browsers, currently available: // - Chrome // - ChromeCanary // - Firefox // - Opera // - Safari (only Mac) // - PhantomJS // - IE (only Windows) browsers: ['Chrome'], browserNoActivityTimeout: 100000, // If browser does not capture in given timeout [ms], kill it captureTimeout: 20000, // Continuous Integration mode // if true, it capture browsers, run tests and exit singleRun: true }); }
Я пробовал разные варианты, упомянутые в других streamах, но ничего не работает.
- Почему в документации модели AngularJS не используется точка?
- Запуск кода инициализации AngularJS при загрузке представления
- Как подсчитать общее количество часов на странице?
- Как я могу назвать фильтр Angular.js с несколькими аргументами?
- Миграция AngularJS в Angular 4,5 (с DEMO)
- Как перебирать элементы, возвращаемые функцией с помощью ng-repeat?
- Как выделить выделенную строку в ngRepeat?
- Лучший способ предотвратить кеш IE в AngularJS?
Наконец, я решил все проблемы и смог успешно запустить тест jasmineа с помощью конфигурации requirejs. Я упомянул все зависимости в конфигурации karma и отметил их как included: false
исключительно, чтобы они загружались requirejs через мой тестовый файл конфигурации.
files: [ {pattern: 'vendor/angular/1.2.1/angular.js', included: false}, {pattern: 'vendor/angular/1.2.1/angular-mocks.js', included: false}, {pattern: 'vendor/angular/1.2.1/angular-*.js', included: false}, {pattern: 'vendor/bootstrap/bootstrap-*.js', included: false}, {pattern: 'jquery-1.7.1.min.js', included: false}, {pattern: 'app/app.js', included: false}, {pattern: 'app/**/*.js', included: false}, {pattern: 'test/test-config.js', included: true}]
только тестовая конфигурация загружается через карму, а все остальные – в конфигурацию кармы, но отмечаются как ложные.
Кроме того, мне пришлось загрузить app.js в моем файле spec, чтобы модули и controllerы загружались:
define(['angular-mocks', 'jquery', 'app/app'], function(angularmocks, $, app){ describe..... }
Поскольку вы загружаете определенные .js-файлы, которые вам нужны в вашем test-main.js с параметрами paths: { }
, вам не нужно явно указывать их в файле karma.config.js. Вместо этого вы можете просто использовать свою строку { pattern: 'app/**/*.js', included: false }
. Все строки до этого являются избыточными. Просто убедитесь, что у вас есть included: false
модификатор, иначе Карма будет загружать их в линию, и вы получите сообщение об Uncaught Error: Mismatched anonymous define()