2015-06-04 1 views
0

Я работаю с сборкой, которая имеет рабочую настройку кармы.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.

ответ

0

Измените ваш karma.conf.js к этому:

files : [ 
    // Must be before xstaticPath + '**/*.js' to be included 
    '../test-main.js', 
    {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} 

], 
+0

Спасибо за ответ. Единственное изменение, чтобы переместить ссылку «../test-main.js» в начало? Если это так, единственным изменением в выходе было изменение «Нет метки времени для .venv» на «Нет метки времени для /.venv». Я особо не ожидал, что это сработает, потому что более старое приложение, в которое я встроил karma/requirejs, имеет ссылку «test-main». –

+0

Тем не менее, я затем вернул изменение, и он все еще говорит «/.venv», поэтому я не знаю, почему это произошло. –

+0

Я уверен, что вы должны держать 'test-main.js' сверху, если вы используете шаблон, подобный' {pattern: '**/*. Js', included: false} ', потому что мы столкнулись с этим использованием, и мы все еще есть комментарий для этого. Во всяком случае, нам что-то не хватает (еще). Я не полностью вижу вашу структуру папок, вы уверены в 'basePath: './static /','? Это явно похоже на проблему с путями. – glepretre