Модульный тест в сложном приложении с AngularJS: карма, жасмин, НО требование не определено в textAngular-rangy.min.js

Мы создали сложное веб-приложение с помощью AngularJS. Теперь нам нужно добавить несколько модульных тестов (хорошо, вы можете сказать, что это слишком поздно, но, пожалуйста, попробуйте), и мы используем для этого Grunt, Jasmine и Karma.

Наш package.json содержит следующие строки:

{ 
    "devDependencies": [
        "grunt-html2js": "0.3.2",
        "jasmine-core": "^2.3.4",
        "jasmine-spec-reporter": "^2.4.0",
        "karma": "0.13.10",
        "karma-jasmine": "0.3.6",
        "karma-chrome-launcher": "0.2.0",
        "karma-firefox-launcher": "0.1.6",
        "grunt-karma": "0.12.1",
    ]
}

Наш gruntFile.js:

grunt.loadNpmTasks('grunt-html2js');
grunt.loadNpmTasks('grunt-karma');

Наш файл конфигурации Karma содержит:

// Karma configuration
// Generated Sep 2015

module.exports = function(config) {
  config.set({
    //more options
    browserDisconnectTimeout: 4000,
    client: {
       captureConsole: true
    },

    // base path that will be used to resolve all patterns (eg. files, exclude)
    basePath: '../../',

    //no plugins!

    // frameworks to use
    // available frameworks: https://npmjs.org/browse/keyword/karma-adapter
    frameworks: ['jasmine'],


    // list of files / patterns to load in the browser
    files: [

        { 'pattern': 'dist/js/libs.js', included: true, served: true },
        // some more
        'test/unit/**/*.spec.js'
    ],

    // more stuff

    // start these browsers
    // available browser launchers: https://npmjs.org/browse/keyword/karma-launcher
    browsers: ['Chrome'],

    singleRun: true
  });
};

Это работает, мы создали для него подходящую черновую задачу. Карма запускает сервер, веб-браузер (Chrome) и начинает тестирование. Я догадываюсь, что он загружает файлы в <head> index.html (или что-то подобное), которые просматривает Chrome. Оказалось, что все это очевидно происходит в <iframe> на этой веб-странице. В любом случае.

Карма теперь перестает работать, утверждая, что "require is not defined". Это необходимое можно найти в нашем libs.js, который включает textAngular-rangy.min.js (созданный bower из textAngular, версия 1.4.1). Эта потрясающая библиотека создана для браузеров или node.js, поэтому я думаю, она проверяет, есть ли window, и переключается на require (режим узла), если нет. Это должно работать нормально в экземпляре Chrome, который запускает Karma.


Есть ли у кого-нибудь идея, почему бы и нет, и есть предложения по обходному пути?

Есть два related SO-Questions, но, в основном, добавление модуля require для Karma делает дела обстоят еще хуже.


person BairDev    schedule 28.09.2015    source источник
comment
Вам действительно нужен модуль textAngular в ваших модульных тестах? Я закончил тем, что просто издевался над всем модулем, избегая, таким образом, зависимости от rangy.   -  person Jens Neubauer    schedule 19.01.2016
comment
В итоге я использовал унифицированную версию rangy (в целом) и предположил, что может быть ошибка в карма-раннере.   -  person BairDev    schedule 28.01.2016