diff --git a/js/ext/angular/test/directive/ionicTabBar.unit.js b/js/ext/angular/test/directive/ionicTabBar.unit.js
new file mode 100644
index 0000000000..96766c0318
--- /dev/null
+++ b/js/ext/angular/test/directive/ionicTabBar.unit.js
@@ -0,0 +1,94 @@
+describe('Tab Bar Controller', function() {
+ var compile, element, scope, ctrl;
+
+ beforeEach(module('ionic.ui.tabbar'));
+
+ beforeEach(inject(function($compile, $rootScope, $controller) {
+ compile = $compile;
+ scope = $rootScope;
+ ctrl = $controller('TabBarCtrl', { $scope: scope, $element: null });
+ }));
+
+ it('Select item in controller works', function() {
+ ctrl.selectTabAtIndex(1);
+ expect(ctrl.getSelectedTabIndex()).toEqual(1);
+ });
+});
+
+describe('Tab Bar directive', function() {
+ var compile, element, scope;
+
+ beforeEach(module('ionic.ui.tabbar'));
+
+ beforeEach(inject(function($compile, $rootScope) {
+ compile = $compile;
+ scope = $rootScope;
+ }));
+
+ it('Has section wrapper class', function() {
+ element = compile('')(scope);
+ expect(element.hasClass('view-wrapper')).toBe(true);
+ });
+});
+
+describe('Tabs directive', function() {
+ var compile, element, scope;
+
+ beforeEach(module('ionic.ui.tabbar'));
+
+ beforeEach(inject(function($compile, $rootScope) {
+ compile = $compile;
+ scope = $rootScope;
+ }));
+
+ it('Has tab class', function() {
+ element = compile('')(scope);
+ scope.$digest();
+ console.log(element);
+ expect(element.find('.bar').hasClass('bar-tabs')).toBe(true);
+ });
+
+ it('Has tab children', function() {
+ scope.tabs = [
+ { text: 'Home', icon: 'icon-home' },
+ { text: 'Fun', icon: 'icon-fun' },
+ { text: 'Beer', icon: 'icon-beer' },
+ ];
+ element = compile('')(scope);
+ scope.$digest();
+ expect(element.find('li').length).toBe(3);
+ });
+});
+
+describe('Tab Item directive', function() {
+ var compile, element, scope, ctrl;
+
+ beforeEach(module('ionic.ui.tabbar'));
+
+ beforeEach(inject(function($compile, $rootScope, $controller) {
+ compile = $compile;
+ scope = $rootScope;
+ //ctrl = $controller('TabBarCtrl', { $scope: scope, $element: null });
+
+ element = compile('' +
+ '' +
+ '')(scope);
+ scope.$digest();
+ }));
+
+ it('Default text works', function() {
+ expect(element.find('a').first().text()).toEqual('Item');
+ });
+
+ it('Default icon works', function() {
+ expect(element.find('i').hasClass('icon-default')).toEqual(true);
+ });
+
+ it('Click sets correct tab index', function() {
+ var a = element.find('a:eq(2)');
+ //spyOn(a, 'click');
+ spyOn(scope, 'selectTab');
+ a.click();
+ expect(scope.selectTab).toHaveBeenCalled();
+ });
+})