Мы создали сложное веб-приложение с помощью 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 делает дела обстоят еще хуже.
textAngular
в ваших модульных тестах? Я закончил тем, что просто издевался над всем модулем, избегая, таким образом, зависимости от rangy. - person Jens Neubauer   schedule 19.01.2016