我想单元测试一个使用Node.js的angularjs控制器。我正在使用gulp.js和mocha通过gulp-mocha运行测试。单元测试使用Node.js,Gulp.js和摩卡的angularjs控制器
这是我的gulpfile.js
看起来像现在:
(function() {
var gulp = require('gulp');
var mocha = require('gulp-mocha');
gulp.task('default', function() {
return gulp
.src('Scripts/Tests/*.js', { read: false })
.pipe(mocha({
ui: 'tdd',
reporter: 'dot',
globals: {
angular: require('./Scripts/angular.js')
}
}));
});
})();
这是被测代码:
(function() {
var application = angular.module('Main');
application.controller('MainController', ['$scope', function ($scope) {
$scope.isDisabled = function() {
return true;
};
}]);
})();
这是测试文件本身:
(function() {
var chai = require('chai');
var assert = chai.assert;
angular.module('Main', []); // Create an empty module
require('../MainController.js'); // Fill the module with the controller
suite('Main Controller', function() {
test('isDisabled always true', function() {
var controllerFactory = angular.injector.get('$controller');
var controller = controllerFactory('MainController', {
'$scope': {}
});
var result = controller.isDisabled();
assert.isTrue(result);
});
});
})();
为了让我的测试和我正在测试的文件能够正常工作,我需要将角度设置为全局。但是,拨打require
在gulpfile.js
给我一个Reference Error: window is not defined
错误。这是有道理的,因为我在Node.js中运行。
在Node.js中加载角度需要做些什么?
这里是一个噶玛模块https://github.com/karma-runner/gulp-karma – unobf
你能告诉我全局'inject'来自哪里吗?是否有另一种方法来获取'$ controller'? –
它是由angular-mock声明的,但是Karma也有一些神奇的功能 – unobf