diff --git a/karma.conf.js b/karma.conf.js
index 9f5fe99f30..cd015bf9bb 100644
--- a/karma.conf.js
+++ b/karma.conf.js
@@ -61,6 +61,8 @@ module.exports = function(config) {
"website/public/js/filters/roundLargeNumbers.js",
"website/public/js/filters/taskOrdering.js",
+ "website/public/js/directives/expand-menu.directive.js",
+ "website/public/js/directives/close-menu.directive.js",
"website/public/js/directives/focus-me.directive.js",
"website/public/js/directives/from-now.directive.js",
"website/public/js/directives/habitrpg-tasks.directive.js",
diff --git a/test/spec/directives/close-menu.directive.js b/test/spec/directives/close-menu.directive.js
new file mode 100644
index 0000000000..7cf41d571c
--- /dev/null
+++ b/test/spec/directives/close-menu.directive.js
@@ -0,0 +1,32 @@
+'use strict';
+
+describe('closeMenu Directive', function() {
+ var element, menuElement, scope, ctrl;
+
+ beforeEach(module('habitrpg'));
+
+ beforeEach(inject(function($rootScope, $compile, $controller) {
+ scope = $rootScope.$new();
+
+ ctrl = $controller('MenuCtrl', {$scope: scope});
+
+ element = '';
+
+ element = $compile(element)(scope);
+ menuElement = $compile(element)(scope);
+ scope.$digest();
+ }));
+
+ it('closes a connected menu when element is clicked', function() {
+ inject(function($timeout) {
+ var clickSpy = sandbox.spy();
+
+ element.appendTo(document.body);
+ element.on('click', clickSpy);
+ element.triggerHandler('click');
+
+ expect(scope._expandedMenu).to.equal(null)
+ expect(clickSpy).to.have.been.called;
+ });
+ });
+});
diff --git a/test/spec/directives/expand-menu.directive.js b/test/spec/directives/expand-menu.directive.js
new file mode 100644
index 0000000000..9c53149486
--- /dev/null
+++ b/test/spec/directives/expand-menu.directive.js
@@ -0,0 +1,32 @@
+'use strict';
+
+describe('expandMenu Directive', function() {
+ var element, menuElement, scope, ctrl, elm;
+
+ beforeEach(module('habitrpg'));
+
+ beforeEach(inject(function($rootScope, $compile, $controller) {
+ scope = $rootScope.$new();
+
+ ctrl = $controller('MenuCtrl', {$scope: scope});
+
+ element = '';
+
+ element = $compile(element)(scope);
+ menuElement = $compile(element)(scope);
+ scope.$digest();
+ }));
+
+ it('expands a connected menu when element is clicked', function() {
+ inject(function($timeout) {
+ var clickSpy = sandbox.spy();
+
+ element.appendTo(document.body);
+
+ element.on('click', clickSpy);
+ element.triggerHandler('click');
+
+ expect(clickSpy).to.have.been.called;
+ });
+ });
+});