2014-12-20 1 views
0

У меня возникли проблемы с выполнением некоторых ранее выполненных тестов Karma с обновлением нескольких библиотек. Я думаю, что я непреднамеренно получил новые версии нескольких пакетов с npm, которые действительно не нуждались в обновлении.Не удается заставить Karma запускать jasmine-jquery после обновления («Невозможно найти переменную: define»)

Я обновил версию Ionic beta 14 и, следовательно, AngularJS 1.3.6 (от 1.2.x), но я подозреваю, что это еще одно обновление, так как я получаю ошибки, прежде чем он достигнет каких-либо реальных тестов. Мои тесты, которые ранее были в порядке начали давать ошибки как:

'undefined' is not an object (evaluating 'jasmine.Matchers.prototype')

Основываясь на this answer я думал, что обновление jasmine-jquery до 2,0 (и как требование для того, чтобы Jquery 2.x) поможет. Однако сделав это и тонкую настройку пути JQuery теперь я получаю:

ReferenceError: Can't find variable: define at [...]/bower/jquery/src/jquery.js:37

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

Некоторые связанные потоки упоминают RequireJS - которые я пытался добавить из отчаяния - но это только что вызвало разные ошибки. Я намеренно не используя RequireJS в любом месте, и к моему знанию пакеты, участвующие здесь не имеет какую-либо зависимость от него

Моего bower.json имеет следующий (?):

"dependencies": { 
    "ionic": "1.0.0-beta.14", 
    "angular-resource": "1.3.6" 
}, 
"devDependencies": { 
    "angular-mocks": "1.3.6", 
    "jasmine": "~2.0", 
    "jasmine-jquery": "~2.0", 
    "jquery": "~2.1" 
} 

Но я думаю, что мое предыдущее config также зависел от некоторых пакетов, установленных в глобальном масштабе. Наверное, не идеальный, но я не знаю, как наилучшим образом примирить это.

karma.conf.js выглядит следующим образом:

module.exports = function(config){ 
config.set({ 
    basePath : '../', 

    files : [ 
     'bower/angular/angular.js', 
     'bower/angular-*/angular-*.js', 
     'bower/angular-mocks/angular-mocks.js', 
     'bower/jquery/src/jquery.js', 
     'bower/jasmine-jquery/lib/jasmine-jquery.js', 
     'bower/angular-ui-router/release/angular-ui-router.js', 
     'bower/ionic/release/js/ionic.js', 
     'bower/ionic/release/js/ionic-angular.js', 
     'www/js/**/*.js', 
     'test/unit/**/*.js', 

     // Data fixtures 
     {pattern: 'test/mock-data/*.json', watched: true, served: true, included: false} 
    ], 

    autoWatch : true, 

    frameworks: ['jasmine'], 

    browsers : ['PhantomJS'], 

    plugins : [ 
     'karma-junit-reporter', 
     'karma-chrome-launcher', 
     'karma-firefox-launcher', 
     'karma-jasmine', 
     'karma-phantomjs-launcher' 
    ], 

    junitReporter : { 
     outputFile: 'test_out/unit.xml', 
     suite: 'unit' 
    } 

})}; 

Я попытался Карма 0.12.16 (который у меня был раньше) и 0.12.28 (последний), но это, кажется, не имеет никакого значения.

Любые идеи высоко оценены!

ответ

0

Наконец-то я получил эту работу. :) К сожалению, в разных точках было много проб и ошибок, поэтому мой ответ может не соответствовать указанным выше симптомам для всех, но некоторые ключевые вещи, которые я пропустил, следующие:

  • Требование.js не было необходимо. Я не уверен, что я сделал, чтобы это казалось таким, но вы можете использовать jasmine-jquery & Karma без него.
  • Точная версия Karma 0.12.x не имеет никакого значения.
  • addMatchers() использование изменилось с помощью жасмина 2.0 - this page объяснил, как мне нужно было изменить мои тесты, чтобы исправить это. У меня есть специальный матчи для тестирования массивов объектов для «Углового равенства».
  • У меня также были некоторые недостатки зависимостей в угловом модуле в результате перехода на ngCordova и попытки ввести только минимально необходимые модули в мои спецификации. Помните, чтобы ваши тесты знали обо всех модулях!

теперь у меня есть это в bower.json:

... 
"dependencies": { 
    "ionic": "1.0.0-beta.14", 
    "angular-resource": "1.3.6", 
    "ngCordova": "0.1.9-alpha" 
}, 
"devDependencies": { 
    "angular-mocks": "1.3.6", 
    "karma-jasmine": "~0.2.0", 
    "karma": "~0.3.0", 
    "jasmine": "2.1.3", 
    "jasmine-jquery": "2.0.5", 
    "jquery": "2.1.3" 
} 

и это мой karma.conf.js:

module.exports = function(config) { 
config.set({ 

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

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

// list of files/patterns to load in the browser 
files: [ 
    'bower/angular/angular.js', 
    'bower/angular-*/angular-*.js', 
    'bower/angular-mocks/angular-mocks.js', 
    'bower/jquery/dist/jquery.js', 
    'bower/jasmine-jquery/lib/jasmine-jquery.js', 
    'bower/angular-ui-router/release/angular-ui-router.js', 
    'bower/ionic/release/js/ionic.js', 
    'bower/ionic/release/js/ionic-angular.js', 
    'plugins/de.appplant.cordova.plugin.local-notification/www/local-notification.js', 
    //'plugins/com.phonegap.plugins.facebookconnect/facebookConnectPlugin.js', 
    'bower/ngCordova/dist/ng-cordova.js', 

    'www/js/**/*.js', 

    'test/unit/**/*.js', 

    // Data fixtures 
    {pattern: 'test/mock-data/*.json', watched: true, served: true, included: false} 
], 

// list of files to exclude 
exclude: [ 
], 

// preprocess matching files before serving them to the browser 
// available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor 
preprocessors: { 
}, 

// test results reporter to use 
// possible values: 'dots', 'progress' 
// available reporters: https://npmjs.org/browse/keyword/karma-reporter 
reporters: ['progress'], 

// web server port 
port: 9876, 

// enable/disable colors in the output (reporters and logs) 
colors: true, 

// level of logging 
// possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG 
logLevel: config.LOG_INFO, 

// enable/disable watching file and executing tests whenever any file changes 
autoWatch: true, 

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

// Continuous Integration mode 
// if true, Karma captures browsers, runs the tests and exits 
singleRun: false 
}); 
}; 
Смежные вопросы