diff --git a/.gitignore b/.gitignore
index 8308bd954d53b85be3743c03d1dac283deb64bb4..15e6bf0dfe6420ebaa82d745d4dfb2769e17f2ac 100644
--- a/.gitignore
+++ b/.gitignore
@@ -22,3 +22,4 @@ profiles.clj
 /node_modules/
 /.js_hint_output/
 /.babel_cache
+/coverage
diff --git a/karma.conf.js b/karma.conf.js
index e894afa3ce7094aec24d5d3627ebfcdb8c11bbb7..8982c603b12fdb245ec78927fa736fb36abc6326 100644
--- a/karma.conf.js
+++ b/karma.conf.js
@@ -1,48 +1,53 @@
 'use strict';
 
 var webpackConfig = require('./webpack.config');
-webpackConfig.cache = true;
-webpackConfig.module.postLoaders = [{
-  test: /\.js$/,
-  exclude: /(_spec|vendor|node_modules)/,
-  loader: 'istanbul-instrumenter'
-}];
+webpackConfig.module.postLoaders = [
+    { test: /\.js$/, exclude: /(_spec|vendor|node_modules)/, loader: 'istanbul-instrumenter' }
+];
 
-module.exports = function (config) {
-  config.set({
-    basePath: '',
-    frameworks: ['jasmine'],
-    files: [
-      'resources/frontend_client/app/**/*.spec.js'
-    ],
-    webpack: {
-      resolve: webpackConfig.resolve,
-      module: webpackConfig.module
-    },
-    preprocessors: {
-      'resources/frontend_client/app/**/*.spec.js': ['webpack']
-    },
-    reporters: [
-        'progress',
-        'coverage'
-    ],
-    coverageReporter: {
-      dir: 'coverage/',
-      subdir: function (browser) {
-        return browser.toLowerCase().split(/[ /-]/)[0];
-      },
-      reporters: [
-        {type: 'cobertura', file: 'cobertura.xml'},
-        {type: 'text', file: 'text.txt'},
-        {type: 'text-summary', file: 'text-summary.txt'},
-        {type: 'html'}
-      ]
-    },
-    port: 9876,
-    colors: true,
-    logLevel: config.LOG_INFO,
-    autoWatch: false,
-    browsers: ['Chrome'],
-    singleRun: true
-  });
+module.exports = function(config) {
+    config.set({
+        basePath: '',
+        files: [
+            'resources/frontend_client/app/dist/vendor.js',
+            // 'resources/frontend_client/vendor.js',
+            'node_modules/angular-mocks/angular-mocks.js',
+            'resources/frontend_client/app/dist/app.js',
+            'resources/frontend_client/app/**/*.spec.js'
+        ],
+        exclude: [
+        ],
+        preprocessors: {
+            'resources/frontend_client/vendor.js': ['webpack'],
+            'resources/frontend_client/app/**/*.spec.js': ['webpack']
+        },
+        frameworks: [
+            'jasmine'
+        ],
+        reporters: [
+            'progress',
+            'coverage'
+        ],
+        webpack: {
+            resolve: webpackConfig.resolve,
+            module: webpackConfig.module
+        },
+        coverageReporter: {
+            dir: 'coverage/',
+            subdir: function(browser) {
+                return browser.toLowerCase().split(/[ /-]/)[0];
+            },
+            reporters: [
+                { type: 'text', file: 'text.txt' },
+                { type: 'text-summary', file: 'text-summary.txt' },
+                { type: 'html' }
+            ]
+        },
+        port: 9876,
+        colors: true,
+        logLevel: config.LOG_INFO,
+        browsers: ['Chrome'],
+        autoWatch: true,
+        singleRun: false
+    });
 };
diff --git a/resources/frontend_client/app/metabase/metabase.services.js b/resources/frontend_client/app/metabase/metabase.services.js
index fbecdf2ab17c0d820f8901637a4a31052cf661a2..bc509ed0047e6ccd786e554845df1f312e7ed8f5 100644
--- a/resources/frontend_client/app/metabase/metabase.services.js
+++ b/resources/frontend_client/app/metabase/metabase.services.js
@@ -1,7 +1,11 @@
 'use strict';
 
 // Metabase Services
-var MetabaseServices = angular.module('corvus.metabase.services', ['ngResource', 'ngCookies']);
+var MetabaseServices = angular.module('corvus.metabase.services', [
+    'ngResource',
+    'ngCookies',
+    'corvus.services'
+]);
 
 MetabaseServices.factory('Metabase', ['$resource', '$cookies', 'CorvusCore', function($resource, $cookies, CorvusCore) {
     return $resource('/api/meta', {}, {
@@ -335,4 +339,4 @@ MetabaseServices.factory('TableSegment', ['$resource', '$cookies', function($res
         },
 
     });
-}]);
\ No newline at end of file
+}]);
diff --git a/resources/frontend_client/app/test/unit/app.spec.js b/resources/frontend_client/app/test/unit/app.spec.js
deleted file mode 100644
index a382d4b1db74eadab4c9ec93d4d721a45b84d855..0000000000000000000000000000000000000000
--- a/resources/frontend_client/app/test/unit/app.spec.js
+++ /dev/null
@@ -1,12 +0,0 @@
-'use strict';
-
-import angular from 'angular';
-import 'angular-mocks';
-
-describe('Hello Service', function () {
-  describe('.hello', function () {
-    it('1 should equal 1', function () {
-      expect(1).toEqual(1);
-    });
-  });
-});
diff --git a/resources/frontend_client/app/test/unit/services.spec.js b/resources/frontend_client/app/test/unit/services.spec.js
new file mode 100644
index 0000000000000000000000000000000000000000..0ca25ab909e7b9047432523e5eab35b7e3d4f770
--- /dev/null
+++ b/resources/frontend_client/app/test/unit/services.spec.js
@@ -0,0 +1,21 @@
+'use strict';
+
+import 'metabase/services';
+import 'metabase/metabase/metabase.services';
+
+describe('corvus.metabase.services', function() {
+    beforeEach(angular.mock.module('corvus.metabase.services'));
+
+    describe('Metabase Service', function() {
+        it('should return current version', inject(function(Metabase, $httpBackend) {
+            $httpBackend.expect('GET', '/api/meta/db/?org=')
+                .respond(200, '[]');
+
+            Metabase.db_list().$promise.then(function(data) {
+                expect(data.length).toEqual(0);
+            });
+
+            $httpBackend.flush();
+        }));
+    });
+});