用Gulp摩卡测试Angular:“;窗口未定义”;
Testing Angular with Gulp-mocha: "Window is not Defined"
我正在用Gulp建立一个项目,用Mocha运行单元测试,包括Angular测试。我有基本的设置工作(indexOf等),但当我包括角度模型时,我会得到这个错误或节点模块错误:
ReferenceError in 'gulp-mocha': "Window is not defined"
我试过使用gullow mocha phantomjs包含angular模块mock。。。但是结果是一样的。(在mocha phantomjs中,我的错误是"初始化超时"。)我见过很多mocha和Angular或Gulp和Karma的配置示例,但还没有找到单独针对Gulp、mocha和Angular的解决方案。
我正在考虑类似于Karma的解决方案,通过在配置文件中指定角度模型并强制Gulp加载它来正确加载角度模型(Karma的角度测试:"模块未定义")。然而,即使这样做有效,gulp-mocha似乎也不支持加载配置文件(mocha.opts-https://github.com/sindresorhus/gulp-mocha/issues/26)。我很乐意听到一个更直接的解决方案。
我使用的是棱角分明的mock 1.2.22和gullow mocha 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
Gulp/Browserify/Mocha最终对我有用的是Karma和Mocha的结合。
具体来说,我使用了gull-carma,并在karma.config.js中定义了配置,并像其他人一样为gull.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模块因果报应摩卡、因果报应柴和果果报应兄弟。(只有前两个,我得到了"require is not defined"。然后我当然尝试了包含karma requirejs,但这对Browserify不起作用。然后我尝试了karma commonjs,仍然不起作用,然后我尝试karma Browserify,得到了一个涉及bundle()的奇怪错误,似乎没有人解决(https://github.com/xdissent/karma-browserify/issues/46)因果报应兄弟成功了。)
我还需要对测试中引用的每个文件以及测试本身进行预处理。(对于使用phantomJS,还包括因果报应phantomJS启动器。我之所以使用bower版本的角度模型,只是因为它更新:与npm的1.2.22相比,v1.22.5版本,但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/lb/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);
}));
});
});
});
我确实明白:"警告:试图加载角度不止一次。"我可以接受它。
- 如何解决'窗口未定义'终端上的节点JS出错
- Internet窗口未定义
- requirejs优化器错误:未定义窗口
- window.location.href窗口未在javascript中定义
- $window错误'$窗口未定义'Angular应用程序中的谷歌分析代码
- 窗.WebSocket - 未定义窗口
- Google Maps API V3 信息窗口错误:“信息窗口未定义”
- 窗口未使用对等.js定义
- 为流星重新包装砌体会产生错误“引用错误:窗口未定义”
- Ace 编辑器:未捕获的引用错误:窗口未定义
- 谷歌地图 api v3 - “信息窗口未定义”错误
- 流星.js:引用错误:窗口未定义
- $=require('jQuery')导致'窗口未定义'.该怎么办
- AngularJS”;ReferenceError:窗口未定义“;在NodeJS应用程序中
- requirejs窗口未定义
- 用Gulp摩卡测试Angular:“;窗口未定义”;
- AWS Cognito未认证登录错误(窗口未定义)[JS]
- SystemJS Builder -窗口未定义
- 使用Grunt的Node JS项目,生成的JS文件有ReferenceError:窗口未定义
- 如何正确处理 React 服务器端渲染中的窗口=未定义错误