Я работаю с сборкой, которая имеет рабочую настройку кармы.Karma w/RequireJS получает 404 файл загрузки
Я пытаюсь интегрировать использование require.js в тесты. Я в основном следовал инструкциям на странице документа Karma RequireJS, чтобы преобразовать мой «karma.conf.js» и построить «test-main.js».
Когда я запускаю тесты, я вижу что-то вроде этого:
DEBUG [watcher]: Resolved files:
...
/home/<myuid>/work/horizon/.venv/lib/python2.7/site-packages/xstatic/pkg/angular/data/angular.js
...
PhantomJS 1.9.8 (Linux) ERROR: 'There is no timestamp for .venv/lib/python2.7/site-packages/xstatic/pkg/angular/data/angular.js!'
...
WARN [web-server]: 404: /.venv/lib/python2.7/site-packages/xstatic/pkg/angular/data/angular.js
DEBUG [PhantomJS 1.9.8 (Linux)]: Disconnected during run, waiting 2000ms for reconnecting.
DEBUG [launcher]: Process PhantomJS exited with code 1
ERROR [launcher]: PhantomJS crashed.
Я бегу Карма с:
node node_modules/karma/bin/karma start horizon/karma.conf.js --single-run
Обратите внимание, что каталог я бегу это от имеет «.venv» папку и файл, упомянутый в 404, существует в этом месте.
Вот мой «горизонт/karma.conf.js» Файл:
module.exports = function(config){
// Path to xstatic pkg path.
var xstaticPath = '../../.venv/lib/python2.7/site-packages/xstatic/pkg/';
config.set({
preprocessors: {
// Used to collect templates for preprocessing.
// NOTE: the templates must also be listed in the files section below.
'./**/*.html': ['ng-html2js'],
// Used to indicate files requiring coverage reports.
'./**/!(*spec).js': ['coverage']
},
// Sets up module to process templates.
ngHtml2JsPreprocessor: {
prependPrefix: '/static/',
moduleName: 'templates'
},
// Assumes you're in the top-level horizon directory.
basePath : './static/',
// Contains both source and test files.
files : [
{pattern: xstaticPath + '**/*.js', included: false},
{pattern: '../../test-shim.js', included: false},
{pattern: 'horizon/**/*.js', included: false},
{pattern: 'dashboard-app/**/*.js', included: false},
{pattern: 'framework/**/*.js', included: false},
{pattern: '**/*.spec.js', included: false},
'../test-main.js'
],
autoWatch : true,
frameworks: ['jasmine', 'requirejs'],
browsers : ['PhantomJS'],
phantomjsLauncher: {
// Have phantomjs exit if a ResourceError is encountered
// (useful if karma exits without killing phantom)
exitOnResourceError: true
},
reporters : [ 'progress', 'coverage' ],
plugins : [
'karma-phantomjs-launcher',
'karma-firefox-launcher',
'karma-jasmine',
'karma-ng-html2js-preprocessor',
'karma-coverage',
'karma-requirejs'
],
logLevel: config.LOG_INFO,
coverageReporter: {
type : 'html',
dir : '../.coverage-karma/'
}
});
};
прежде чем мой «горизонт/тест-main.js» (обратите внимание, что я пытался встроить переменное эталонное значение, которое не помогло):
var allTestFiles = [];
var TEST_REGEXP = /\.spec\.js$/;
Object.keys(window.__karma__.files).forEach(function(file) {
if (window.__karma__.files.hasOwnProperty(file)) {
if (TEST_REGEXP.test(file)) {
// Normalize paths to RequireJS module names.
allTestFiles.push(file);
}
}
});
var xstaticPath = '../../.venv/lib/python2.7/site-packages/xstatic/pkg/';
require.config({
baseUrl: '/base',
paths: {
'test-shim': '../../test-shim',
'jquery': xstaticPath + 'jquery/data/jquery',
//'angular': xstaticPath + 'angular/data/angular',
'angular': '../../.venv/lib/python2.7/site-packages/xstatic/pkg/angular/data/angular',
'angular-mocks': xstaticPath + 'angular/data/angular-mocks',
'angular-cookies': xstaticPath + 'angular/data/angular-cookies',
'angular-bootstrap': xstaticPath + 'angular_bootstrap/data/angular-bootstrap',
'angular-sanitize': xstaticPath + 'angular/data/angular-sanitize',
'd3': xstaticPath + 'd3/data/d3',
'rickshaw': xstaticPath + 'rickshaw/data/rickshaw',
'smart-table': xstaticPath + 'angular_smart_table/data/smart-table',
'lrdragndrop': xstaticPath + 'angular_lrdragndrop/data/lrdragndrop',
'spin': xstaticPath + 'spin/data/spin',
'spin-jquery': xstaticPath + 'spin/data/spin.jquery',
'magic-search': xstaticPath + 'magic_search/data/magic_search'
},
shim: {
'underscore': {
exports: '_'
}
},
deps: allTestFiles,
callback: window.__karma__.start
});
Есть ли что-то явно неправильное или есть что-то, что я могу сделать, чтобы получить дополнительную информацию? Я запускаю это на CentOS 7.0.
Спасибо за ответ. Единственное изменение, чтобы переместить ссылку «../test-main.js» в начало? Если это так, единственным изменением в выходе было изменение «Нет метки времени для .venv» на «Нет метки времени для /.venv». Я особо не ожидал, что это сработает, потому что более старое приложение, в которое я встроил karma/requirejs, имеет ссылку «test-main». –
Тем не менее, я затем вернул изменение, и он все еще говорит «/.venv», поэтому я не знаю, почему это произошло. –
Я уверен, что вы должны держать 'test-main.js' сверху, если вы используете шаблон, подобный' {pattern: '**/*. Js', included: false} ', потому что мы столкнулись с этим использованием, и мы все еще есть комментарий для этого. Во всяком случае, нам что-то не хватает (еще). Я не полностью вижу вашу структуру папок, вы уверены в 'basePath: './static /','? Это явно похоже на проблему с путями. – glepretre