我想單元測試一個使用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