我在使用一些以前工作的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(最新版本),但这似乎没有任何区别。
任何想法都非常感激!
答案 0 :(得分:0)
我现在终于开始工作了。 :)不幸的是,在不同的地方有很多试验和错误,所以我的答案可能与每个人的上述症状不一致,但我错过的一些关键事项是:
addMatchers()
使用已更改为jasmine 2.0 - this page解释了我需要如何更改测试以解决此问题。我有一个自定义匹配器来测试对象数组的角度相等'。我现在在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
});
};