试图将requirejs添加到我的业力测试中,现在得到“脚本错误:jasmine-jquery”

时间:2014-02-21 03:28:49

标签: javascript jquery requirejs jasmine karma-runner

我有一个没有requirejs的基于业力的测试的工作实现,我决定在它变得太大之前我应该​​添加requirejs。

我不确定我做了什么,但我现在收到一条我不明白的错误信息。

我对其中一些框架的抱怨是,当出现问题时,诊断程序有些神秘。

这是我在INFO级别看到的:

INFO [karma]: Karma v0.10.2 server started at http://localhost:9876/
INFO [launcher]: Starting browser Chrome
WARN [watcher]: Pattern "<projectroot>/src/test/webapp/js/libs/jasmine-query.js" does not match any file.
INFO [Chrome 32.0.1700 (Windows 7)]: Connected on socket ORPzWZDQ7lM8ExSoa6RC
ERROR: 'There is no timestamp for /base/src/test/webapp/js/libs/jasmine-jquery.js!'
WARN [web-server]: 404: /base/src/test/webapp/js/libs/jasmine-jquery.js
Chrome 32.0.1700 (Windows 7) ERROR
    Uncaught Error: Script error for: jasmine-jquery
    http://requirejs.org/docs/errors.html#scripterror
    at <homedir>/AppData/Roaming/npm/node_modules/requirejs/require.js:141

“不匹配任何文件”警告是第一个出现问题的迹象,但我不明白为什么会这么说。

这是我的“karma.conf.js”:

module.exports = function(config) {
    'use strict';
  config.set({
basePath: '../../../..',
frameworks: ['jasmine', 'requirejs'],
files: [
    {pattern: "src/main/webapp/js/**/*.js", included: false},
    {pattern: "src/test/webapp/js/**/*.test.js", included: false},
    {pattern: "src/test/webapp/js/libs/jasmine-query.js", included: false},
    "src/test/webapp/js/test-main.js"
    ],
exclude: [
],
plugins:[
     'karma-jasmine',
     'karma-requirejs',
     'karma-coverage',
     'karma-junit-reporter',
     'karma-phantomjs-launcher',
     'karma-chrome-launcher',
     'karma-firefox-launcher',
     'karma-ie-launcher'
     ],
preprocessors: {
    "src/main/webapp/js/mylibs/*.js": 'coverage'
},
coverageReporter: {
    type: "lcov",
    dir: "target/karma-coverage"
},
junitReporter: {
    outputFile: 'target/surefire-reports/TEST-karma.xml'
},
reporters: ['dots', 'junit'],
port: 9876,
colors: true,
logLevel: config.LOG_INFO,
autoWatch: true,
browsers: ['Chrome'],
captureTimeout: 60000,
singleRun: false
  });
};

这是我的“test-main.js”:

var tests = [];
for (var file in window.__karma__.files) {
if (window.__karma__.files.hasOwnProperty(file)) {
    if (/\.test\.js$/.test(file)) {
    tests.push(file);
    }
}
}

requirejs.config({
baseUrl: '/base',
paths: {
    'jquery': 'src/main/webapp/js/libs/jquery-1.4.2',
    'jasmine-jquery': 'src/test/webapp/js/libs/jasmine-jquery'
},
shim: {
    'jasmine-jquery': {
    deps: ['jquery']
    }
},
deps: tests,
callback: window.__karma__.start
});

如果有帮助,这里是src / test / webapp中的文件列表,包括一些我还没有使用的文件(我认为):

src/test/webapp/css/jasmine.css
src/test/webapp/js/data.daily.test.js
src/test/webapp/js/init.js
src/test/webapp/js/karma.conf.js
src/test/webapp/js/libs/boot.js
src/test/webapp/js/libs/console.js
src/test/webapp/js/libs/jasmine-html.js
src/test/webapp/js/libs/jasmine-jquery.js
src/test/webapp/js/libs/jasmine.js
src/test/webapp/js/libs/require-2.1.11.min.js
src/test/webapp/js/test-main.js

2 个答案:

答案 0 :(得分:0)

您使用的是哪种版本的jquery-jasmine?尝试将jquery更新到最新版本(如果要支持旧浏览器,则为2.1.0或1.9.0)。我有一些问题用jquery 1.7.0运行jasmine-query,更新jquery为我修复它。

此外,jQuery 1.4.2已经很老了(2010年1月14日发布了1.4.0)所以更新不会是个坏主意!

答案 1 :(得分:0)

我相信我找到了解决这个问题的方法。奇怪的是,文件列表中的“模式”子属性似乎要求它是一个实际的模式,而不是一个只能匹配单个文件的路径。

一旦我在“karma.conf.js”中更改了以下内容:

{pattern: "src/test/webapp/js/libs/jasmine-query.js", included: false},

为:

{pattern: "src/test/webapp/js/libs/*.js", included: false},

它停止抱怨。