Karma / Require.js无法找到文件

时间:2014-02-12 22:18:25

标签: angularjs unit-testing requirejs karma-runner

我正在尝试使用Require.js和AngularJS下的业力编写单元测试。我以https://github.com/tnajdek/angular-requirejs-seed为起点。当我按原样构建项目时,一切正常。

Chrome 32.0.1700 (Windows 7): Executed 3 of 3 SUCCESS (0.317 secs / 0.007 secs)

现在,我想引用一个不同版本的AngularJS脚本,而不是由bower加载。 (我们有一个生产目录结构,我无法改变。)我在/ scripts / angular-test中有种子项目,我想引用不在bower目录中的AngularJS文件,但它在我们的系统中是/ scripts /angular/angular-dev-1.2.8.js。

我认为我需要做的第一件事就是修改karma.conf.js文件以指向不同的根目录:

module.exports = function(config) {
    config.set({
        basePath: '../..',
        frameworks: ['jasmine', 'requirejs'],
        files: [
            {pattern: 'angular-test/app/js/*.js', included: false},
            {pattern: 'angular-test/app/js/**/*.js', included: false},
            {pattern: 'angular-test/test/unit.js', included: false},
            {pattern: 'angular-test/test/unit/*.js', included: false},
            {pattern: 'angular-test/test/unit/**/*.js', included: false},
            {pattern: 'angular-test/bower_components/**/*.js', included: false},
            // needs to be last http://karma-runner.github.io/0.10/plus/requirejs.html
            'angular-test/test/main-test.js'
        ],
    autoWatch: true,
    LogLevel: config.LOG_DEBUG,
    browsers: ['Chrome'],
    junitReporter: {
        outputFile: 'angular-test/test_out/unit.xml',
        suite: 'unit'
    }
  });
};

我更改了所有其他引用以在其路径中进行角度测试,例如在main-test.js文件中:

require.config({
    paths: {
        angular: '/base/angular-test/bower_components/angular/angular',
        angularRoute: '/base/angular-test/bower_components/angular-route/angular-route',
        angularMocks: '/base/angular-test/bower_components/angular-mocks/angular-mocks',
        text: '/base/angular-test/bower_components/requirejs-text/text',
        fixtures: '/base/angular-test/test/unit/fixtures'

    },
    baseUrl: '/base/angular-test/app/js',
...

一切仍然有效。请注意,此时,我仍然使用angular-requirejs-seed中的所有相同文件。但是,浏览器中的URL确实会发生变化;而不是

http://localhost:9876/base/bower_components/angular/angular.js

现在是对angular.js的引用

http://localhost:9876/base/angular-test/bower_components/angular/angular.js

到目前为止一切顺利。现在,我想更改对angular.js的引用。所以我在main-test.js中将其更改为

        angular: '/base/angular/angular-dev-1.2.8',

现在,它再也找不到角度 - 具体来说,浏览器试图点击

http://localhost:9876/base/angular/angular-dev-1.2.8.js

正如人们所期望的那样,但它得到了404导致业力错误

ERROR: 'There is no timestamp for /base/angular/angular-dev-1.2.8.js!'
Chrome 32.0.1700 (Windows 7): Executed 0 of 0 SUCCESS (0 secs / 0 secs)
Chrome 32.0.1700 (Windows 7) ERROR
    Uncaught Error: Script error for: angular
    http://requirejs.org/docs/errors.html#scripterror
    at d:/Gary/AppData/Roaming/npm/node_modules/requirejs/require.js:141
Chrome 32.0.1700 (Windows 7): Executed 0 of 0 ERROR (0.254 secs / 0 secs)

鉴于对“/base/angular-test/bower_components/angular/angular.js”的修改引用有效,我希望它也可以工作,但事实并非如此。我唯一能想到的是,由于某些原因,业力网络服务器限制只访问/ base / angular-test子树,但我无法想象为什么会这样。

2 个答案:

答案 0 :(得分:0)

在你的karma.conf.js文件中尝试{pattern: 'angular-test/bower_components/**/*.js', included: false},然后在main-test.js文件中提及:

shim: {

    'angular' : {'exports' : 'angular'},
    'angularMocks': {
        deps:['angular'],
        'exports':'angular.mock'
    },
    '<your App name>': {
        deps: ['angular'],
        'exports': '<your App name>'

}

我认为当requirejs无法插入角度时你会收到错误。当Chrome打开时,点击调试按钮然后在调试器上,检查元素并检查是否在<body>以及<head>中加载了所有必需的文件。希望这可以帮助。欢呼声。

答案 1 :(得分:0)

  

到目前为止一切顺利。现在,我想更改对angular.js的引用。所以我在main-test.js中将其更改为

     

angular:&#39; /base/angular/angular-dev-1.2.8' ;,

     

现在,它再也找不到角度 - 具体来说,浏览器试图点击

     

localhost:9876 / base / angular / angular-dev-1.2.8.js

     

正如人们所期望的那样,但它得到了404导致业力错误

在你更改了main-test.js中的引用并且东西开始失败之后,你是否回到你的karma配置文件并确保包含新文件?我总是忘记这样做,所以我总是最终得到那些404.