我已经卡在这里一段时间,试图设置和运行单元测试。
我有一个使用RequireJS和r.js进行优化的AngularJS前端,因此它全部都在一个单独的文件中。这很好用!
但是无法执行单元测试。目前还没有什么花哨的东西,只是从教程中复制了一个入门程序。
tests/user/user.test.js
:
define(['angular', 'angular-mocks', 'app'], function(angular, app) {
describe('Unit: UserController', function() {
beforeEach(module('user.app'));
it('should do something', function() {
console.log('did it');
});
});
});
然后我有一个karma.conf.js
文件:
module.exports = function(config) {
config.set({
logLevel: config.LOG_DEBUG,
basePath: './',
files: [
// r.js'd app files
{pattern: 'dist/app.js', included: false},
// the tests
{pattern: 'tests/**/*.test.js', included: true},
],
excluded: ['tests/main.test.js']
frameworks: ['jasmine', 'requirejs'],
browsers: ['PhantomJS'],
plugins: [
'karma-jasmine',
'karma-junit-reporter',
'karma-phantomjs-launcher',
'karma-requirejs'
],
});
};
一个
main.test.js
:var allTestFiles = [];
var TEST_REGEXP = /(spec|test)\.js$/i;
var pathToModule = function(path) {
var returnValue = path.replace(/^\/base\//, '').replace(/\.js$/, '');
return returnValue;
};
Object.keys(window.__karma__.files).forEach(function(file) {
if (TEST_REGEXP.test(file)) {
// Normalize paths to RequireJS module names.
allTestFiles.push(pathToModule(file));
}
});
require.config({
baseUrl: '/base',
paths: {
'angular-mocks': 'node_modules/angular-mocks/angular-mocks',
'app': 'dist/app',
},
deps: allTestFiles,
callback: function() {
console.log('load complete');
window.__karma__.start();
},
});
最后是一个 gulp
任务:
var gulp = require('gulp');
var karma = require('karma').server;
gulp.task('unit-test', function(done) {
karma.start({
configFile: __dirname + '/karma.conf.js',
singleRun: true
}, function() { done(); });
}
我在一些地方添加了日志输出,显示文件已加载。
但是我卡在了获取 tests/user/user.test.js
中的 Error: Mismatched anonymous define()
上,我不知道哪里出错了。以下是输出结果:http://pastebin.com/evJPj9B3
如果我像这样命名单元测试模块
define('namedtestorso', ['angular', 'angular-mocks', 'app'], function(angular, app) {
...
我不再收到任何错误提示,但测试也未被执行。由于我能想到的所有示例都将其用作匿名定义,因此我认为这里的命名不正确。但在这种情况下,日志输出会被执行,显示来自main.test.js
的配置回调被执行了两次。(这是什么提示吗?)
如果有人有想法如何修复/运行它,甚至如何继续找出问题所在,那将是很棒的。提前感谢!