更新后无法让Karma与jasmine-jquery一起运行(“找不到变量:define”)

时间:2014-12-20 13:17:30

标签: angularjs jasmine karma-runner jasmine-jquery

我在使用一些以前工作的Karma测试运行更新了一些库时遇到了很多麻烦。我想我无意中得到了一些没有真正需要更新的npm的新版本。

我已经更新到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

我确定这只是我的Karma配置中的一个愚蠢的错误,阻止它加载正确的软件包,但是尽管尝试了很多变种并检查了通过搜索找到的几十个潜在修复,我仍然没有让它运行再一次。

一些相关的主题提到了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"
}

但我认为我之前的配置也取决于一些全球安装的Node包。可能不理想,但我不知道调和它的最好方法。

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'
    }

})};

我尝试过Karma 0.12.16(我之前使用过)和0.12.28(最新版本),但这似乎没有任何区别。

任何想法都非常感激!

1 个答案:

答案 0 :(得分:0)

我现在终于开始工作了。 :)不幸的是,在不同的地方有很多试验和错误,所以我的答案可能与每个人的上述症状不一致,但我错过的一些关键事项是:

  • Require.js不是必需的。我不知道我做了什么让它看起来像是,但你可以使用jasmine-jquery&没有它的业力。
  • Karma 0.12.x的精确版本似乎没有任何区别。
  • addMatchers()使用已更改为jasmine 2.0 - this page解释了我需要如何更改测试以解决此问题。我有一个自定义匹配器来测试对象数组的角度相等'。
  • 由于转移到ngCordova并尝试仅在我的规范中注入最少的必要模块,因此我也缺少一些Angular模块依赖项。记得让你的测试了解所有模块!

我现在在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
});
};