我正在尝试使用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子树,但我无法想象为什么会这样。
答案 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.