0

Я пытаюсь выполнить тестирование приложения AngularJS/Browserify с помощью карма-браузера. В конце концов, когда я бегу мой Глоток карму задачу, я получаю ошибку Error: [$injector:nomod] Module 'myApp' is not available! You either misspelled the module name or forgot to load it...Единичное тестирование Приложение AngularJS с карма-браузером

Мои gulpfile.js имеет задачу

gulp.task('test', function(done) { 
    new karma.Server({ 
     configFile: __dirname + '/karma.conf.js' 
    }, done).start(); 
}); 

Мои karma.conf.js включает

{ 
    // ... 
    frameworks: ['browserify', 'jasmine'], 
    files: [ 
    'node_modules/angular/angular.js', 
    'node_modules/angular-mocks/angular-mocks.js', 
    'spec/**/*.js' 
    ], 
    preprocessors: { 
    'spec/**/*.js': [ 'browserify' ] 
    }, 
    browserify: { 
    debug: true 
    } 
    // ... 
} 

Я определяю свой модуль в main.js, который включает

require('angular').module('myApp', [ 
    //...lots of `require`s for each dependency... 
]); 

Я определяю мой контроллер в MainCtrl.js, который выглядит как

function MainCtrl(/*...deps...*/) { 
    var ctrl = this; 
    ctrl.foo = 'bar'; 
} 

module.exports = MainCtrl; 

затем зарегистрировать контроллер в другом месте, как

var app = require('angular').module('myApp'); 
app.controller('MainCtrl', [/*...deps...*/, require('./MainCtrl')]); 

Наконец мой тест выглядит

(function() { 
    "use strict"; 

    describe('MainCtrl', function() { 
     var ctrl; 

     beforeEach(angular.mock.module('myApp')); 

     beforeEach(inject(function($controller) { 
      ctrl = $controller('MainCtrl'); 
     })); 

     it('should be defined', function() { 
      expect(ctrl).toBeDefined(); 
     }); 
    }); 
}()); 

Обходное решение

Обходной у меня есть, чтобы добавить свой main.js файл karma.conf.js

files: [ 
    'js/main.js', // ADDED: Defines the app and `require`s angular 
    'node_modules/angular-mocks/angular-mocks.js', 
    'spec/**/*.js' 
], 
preprocessors: { 
    'js/main.js': ['browserify'], // ADDED 
    'spec/**/*.js': ['browserify'] 
} 

и все работает. Но я думал, что я не должен добавлять свои исходные файлы в карму (по крайней мере, не с карма-браузером). Это правильный способ настроить мой проект?

ответ

1

Да, «обходной путь» является искомым способ использования karma-browserify.

preprocessors definition определяет, какие из включенных файлов должны быть обработано с помощью которых препроцессор, но не включают их:

Ключей препроцессоров конфигурации объекта используются для фильтрации файлов, указанных в конфигурационных файлах.

это files definition, что на самом деле включает в себя файлы:

Массива файлов определяет, какие файлы включены в браузере и , какие файлы наблюдаемые и обслуживаются Кармой.

0

Файлы сообщают Карму, которая должна загружать ее относительно базового пути. К ним относятся:

Все испытания, связанные библиотеки Наш исходный код для проверки Испытания сами

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