Page 252 - AngularJS权威教程
P. 252
232 第 19 章 测试
port: 9876,
colors: true,
logLevel: config.LOG_INFO,
autoWatch: true,
browsers: ['Chrome'],
captureTimeout: 60000,
singleRun: false
});
};
注意我们没有排除main.js,它是应用开始的文件。
鉴于Karma会提供app/js目录下的文件,我们来给Karma文件服务器配置一个起始的上下文,
用相对路径加载模块。因为我们想要测试的baseUrl和源码文件在同一目录,所以需要把basePath
设置成本地目录(.)。
2. test/test-main.js
我们的test-main.js文件会代替主应用文件,提供引用测试文件的能力,无需把应用真正启动
起来。
Karma会包含所有在数组window.karma.files里面的文件,所以我们会在这里发现我们的测试
文件。然后,就可以正常配置RequireJS了:
var tests = [];
for (var file in window.__ karma__.files) {
if (window. __karma__.files.hasOwnProperty(file)) {
if (/Spec\.js$/.test(file)) {
tests.push(file);
}}}
requirejs.config({
baseUrl: 'app',
paths: {
'jquery': 'lib/jquery',
'angular': 'lib/angular',
'angularRoute': 'lib/angular-route',
'angularMocks': 'lib/angular-mocks',
},
shim: {
'underscore': {
exports: '_'
}
},
// 让Require.js加载这些文件(我们所有的测试)
deps: tests,
// RequireJS完成之后就启动测试
callback: window.__karma__.start
});
测试看起来将和默认不使用RequireJS的情况不太一样。可以简单地像平常一样使用RequireJS,
把测试放在define()里。例如:
define([
'app', 'jquery', 'angular',
'angular', 'angularRoute', 'angularMocks'