我正在用Gulp建立一个项目,用Mocha运行单元测试,包括角度测试。我有基本的设置工作(indexOf等),但是当我包含角度模拟时,我得到了这个错误或节点模块错误:
ReferenceError in 'gulp-mocha': "Window is not defined"
我试过包括角度模组-模拟,使用吞咽-摩卡-幻影.但结果是一样的。(对于mocha-幻影,我的错误是“Init timeout”。)我见过许多使用Mocha和角或Gulp和Karma的配置的例子,但是还没有找到关于Gulp、Mocha和角的单独解决方案。
我正在考虑类似于这个Karma解决方案的东西,通过在一个配置文件中指定它并强制Gulp加载它(Angular testing with Karma: "module is not defined")来正确地加载角度模拟。然而,即使这样做可以工作,它似乎吞咽-摩卡不支持加载配置文件(mocha.opts - https://github.com/sindresorhus/gulp-mocha/issues/26)。我很乐意听到更直截了当的解决办法。
我使用角度模拟1.2.22和吞咽-摩卡1.1.0。
代码片段:
var mocha = require('gulp-mocha');
gulp.task('test', function () {
return gulp.src('test/*.js', {read: false})
.pipe(mocha({reporter: 'nyan', timeout: 400}));
});test/test.js
var assert = require('assert');
var angular_mocks = require('angular-mocks'); //Fails only when this line is present
//tests发布于 2014-09-18 17:30:42
最终对我有效的是使用Karma和Mocha的结合。
具体来说,我使用了吞咽业力,并在karma.config.js中定义了配置,并像其他人一样为gulp.src使用了一个虚拟文件:
gulp.task('test', function () {
return gulp.src('./foobar.js').pipe(karma({
configFile:'karma.config.js',
action: 'run'
}))
.on('error', handleErrors);
});然后我使用了这个karma.config.js文件。我需要npm模块业力-摩卡,业力-chai和业力-兄弟.(只有前两个,我得到的是“”。当然,我尝试过包括业力要求,但这并不适用于Browserify。然后我尝试了因果报应--俗语,但还是没用。然后,我尝试了业力-浏览化,并得到了一个奇怪的错误,涉及包(),似乎没有人解决(https://github.com/xdissent/karma-browserify/issues/46)。Karma兄弟成功了。)
我还需要对测试中引用的每个文件以及测试本身进行预处理。(对于使用karma-phantomjs-launcher.,phantomJS也包括我使用的是角形模拟的第一个版本,因为它是最近的版本: v1.2.25,而npm的版本是1.2.22,但npm版本可能有效。)
module.exports = function(config) {
config.set({
basePath: '',
// frameworks to use
frameworks: ['browserify', 'mocha', 'chai'],
// list of files / patterns to load in the browser
files: [
'node_modules/angular/lib/angular.min.js',
'bower_components/angular-mocks/angular-mocks.js',
'source/javascript/controllers/*.js',
'source/javascript/*.js',
'test/*.js'
],
reporters: ['progress'],
port: 9876,
colors: true,
autoWatch: true,
browsers: ['PhantomJS'],
preprocessors: {
'source/javascript/controllers/*.js': ['browserify'],
'source/javascript/*.js': ['browserify'],
'test/*.js': ['browserify']
}
});
};最后这个测试通过了。最后,我需要确保我的模块和控制器的名称是一致的(大写等等)。解决“模块未定义”错误。为了调试,我将文件中的node_modules/angular/lib/angular.min.js替换为node_modules/angular/lib/angular.js。
describe('Angular', function() {
describe('App Controllers', function() {
beforeEach(angular.mock.module('App'));
describe('MessageCtrl', function() {
it('should retrieve the correct amount of messsages', angular.mock.inject(function($controller) {
var scope = {},
ctrl = $controller('MessageCtrl', {$scope:scope});
assert.equal(scope.messages.length, 2);
}));
});
});
});我确实明白这句话:“警告:尝试加载角度超过一次。”我能忍受它。
https://stackoverflow.com/questions/25905139
复制相似问题