我正在试图弄清楚如何编写一些简单的Karma测试,但是我在语法方面遇到了一些麻烦而只是理解了框架。这是一个我想为其编写测试的控制器:
myApp.controller('menuController', ['$rootScope', '$parse', '$attrs', '$scope', 'Menu', 'Track', '$state',
function($rootScope, $parse, $attrs, $scope, Menu, Track, $state){
$scope.Menu = Menu;
$rootScope.$on("click",function() {
Menu.active = false;
});
$scope.click = function(button) {
Track.event(2, button + "_button_pressed", true);
};
}])
这是我为这个控制器编写的一个简单测试,我试图测试菜单按钮点击时的活动状态变化:
describe('Controller: menuController', function() {
//load the module with menuController
beforeEach(module('myApp'));
var MainCtrl,
scope;
// Initialize the controller and a mock scope
beforeEach(inject(function ($controller, $rootScope) {
scope = $rootScope.$new();
MainCtrl = $controller('menuController', {
$scope: scope
});
}));
//put test here
it ('should change $scope.Menu.active to true when button is clicked', function() {
expect(scope.Menu.active).toBeFalse();
scope.click();
expect(scope.Menu.active).toBeTrue();
})
});
运行Grunt测试后,测试失败,其返回的错误之一是:
TypeError: 'undefined' is not an object (evaluating 'scope.Menu')
我希望有人能告诉我自己做错了什么,或者告诉我如何为上面显示的控制器编写一个简单的业力测试。
提前致谢!