【发布时间】:2014-02-12 22:18:25
【问题描述】:
我正在尝试在 Require.js 和 AngularJS 下使用 karma 编写单元测试。我以https://github.com/tnajdek/angular-requirejs-seed 为起点。当我按原样构建项目时,一切正常。
Chrome 32.0.1700 (Windows 7): Executed 3 of 3 SUCCESS (0.317 secs / 0.007 secs)
现在,我想引用与 bower 加载的不同版本的 AngularJS 脚本。 (我们有一个无法更改的生产目录结构。)我在 /scripts/angular-test 中有种子项目,我想引用 AngularJS 文件,而不是在 bower 目录中,而是在我们系统中的 /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'
}
});
};
我将所有其他 ref 更改为在其路径中包含 angular-test,例如在 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',
现在,它不再能找到 angular - 具体来说,浏览器试图点击
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 子树的访问,尽管我无法想象为什么会这样。
【问题讨论】:
标签: angularjs unit-testing requirejs karma-runner