测试 class 已添加或删除 angularjs 应用的 karma
Testing a class was added or removed with karma for an angularjs app
我正在尝试使用 karma/jasmine 为 angularjs 应用编写一些单元测试。
我挂断的部分是测试 class 是否成功 added/removed。
我要测试的功能:
vm.toggleMenu = function toggleMenu(prev) {
if(angular.element('menu').hasClass('hide')) {
if(prev) {
angular.element('#view').removeClass('col-md-8').addClass('col-md-12');
} else {
angular.element('menu').removeClass('hide');
angular.element('#view').removeClass('col-md-12').addClass('col-md-8');
}
} else {
if(prev) {
angular.element('#view').removeClass('col-md-12').addClass('col-md-8');
} else {
angular.element('menu').addClass('hide');
angular.element('#view').removeClass('col-md-8').addClass('col-md-12');
}
}
};
html:
<div id="view" class="col-md-12" ng-view=""></div>
<menu class="col-md-4"></menu>
menu 是自定义指令。
我的测试:
describe('Ctrl spec', function() {
var controller, vm, scope, menu, compile, view;
beforeEach(function(){
module('app');
module('templates');
inject(function($controller, $rootScope, $compile) {
controller = $controller;
scope = $rootScope;
compile = $compile;
vm = controller('Ctrl', {$scope: scope});
menu = angular.element('<menu></menu>');
view = angular.element('<div id="view" class="col-md-12"></div>');
compile(menu)(scope);
spyOn(vm, 'toggleMenu');
})
});
describe('function', function() {
it('view should have class col-md-8', function() {
vm.toggleMenu();
expect(view.hasClass('col-md-8')).toBe(true);
});
});
当我 console.log 查看时,我得到
LOG: {0: <div id="view" class="col-md-12 ng-scope"></div>, length: 1}
我也试过将 class ng-hide 添加到菜单中,就像在我的测试中一样-spec.js:
menu = angular.element('<menu class="hide"></menu>');
并且始终将其作为输出:
Expected false to be true.
Error: Expected false to be true.
任何有关如何正确测试 class 的帮助 added/removed 都将不胜感激!!
我还是放不下,只好再玩玩。我发现了我的错误。
这一行:menu = angular.element('<menu></menu>');
被错误使用。
需要menu = angular.element('menu');
。
Angular.element 并不意味着与完整标签一起使用,而是与 类、ID 或元素本身的名称一起使用。
我正在尝试使用 karma/jasmine 为 angularjs 应用编写一些单元测试。
我挂断的部分是测试 class 是否成功 added/removed。
我要测试的功能:
vm.toggleMenu = function toggleMenu(prev) {
if(angular.element('menu').hasClass('hide')) {
if(prev) {
angular.element('#view').removeClass('col-md-8').addClass('col-md-12');
} else {
angular.element('menu').removeClass('hide');
angular.element('#view').removeClass('col-md-12').addClass('col-md-8');
}
} else {
if(prev) {
angular.element('#view').removeClass('col-md-12').addClass('col-md-8');
} else {
angular.element('menu').addClass('hide');
angular.element('#view').removeClass('col-md-8').addClass('col-md-12');
}
}
};
html:
<div id="view" class="col-md-12" ng-view=""></div>
<menu class="col-md-4"></menu>
menu 是自定义指令。
我的测试:
describe('Ctrl spec', function() {
var controller, vm, scope, menu, compile, view;
beforeEach(function(){
module('app');
module('templates');
inject(function($controller, $rootScope, $compile) {
controller = $controller;
scope = $rootScope;
compile = $compile;
vm = controller('Ctrl', {$scope: scope});
menu = angular.element('<menu></menu>');
view = angular.element('<div id="view" class="col-md-12"></div>');
compile(menu)(scope);
spyOn(vm, 'toggleMenu');
})
});
describe('function', function() {
it('view should have class col-md-8', function() {
vm.toggleMenu();
expect(view.hasClass('col-md-8')).toBe(true);
});
});
当我 console.log 查看时,我得到
LOG: {0: <div id="view" class="col-md-12 ng-scope"></div>, length: 1}
我也试过将 class ng-hide 添加到菜单中,就像在我的测试中一样-spec.js:
menu = angular.element('<menu class="hide"></menu>');
并且始终将其作为输出:
Expected false to be true.
Error: Expected false to be true.
任何有关如何正确测试 class 的帮助 added/removed 都将不胜感激!!
我还是放不下,只好再玩玩。我发现了我的错误。
这一行:menu = angular.element('<menu></menu>');
被错误使用。
需要menu = angular.element('menu');
。
Angular.element 并不意味着与完整标签一起使用,而是与 类、ID 或元素本身的名称一起使用。