diff --git a/web/gui/src/main/webapp/tests/app/fw/widget/tableBuilder-spec.js b/web/gui/src/main/webapp/tests/app/fw/widget/tableBuilder-spec.js
new file mode 100644
index 0000000..27f9b40
--- /dev/null
+++ b/web/gui/src/main/webapp/tests/app/fw/widget/tableBuilder-spec.js
@@ -0,0 +1,100 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*
+ ONOS GUI -- Widget -- Table Builder Service - Unit Tests
+ */
+
+describe('factory: fw/widget/tableBuilder.js', function () {
+    var $log, $rootScope, fs, tbs;
+
+    var mockObj,
+        mockWss = {
+            bindHandlers: function () {},
+            sendEvent: function () {},
+            unbindHandlers: function () {}
+        };
+
+    beforeEach(module('onosWidget', 'onosUtil', 'onosRemote'));
+
+    // TODO: actual websocket calls should be tested in the websocket service
+    beforeEach(function () {
+        module(function ($provide) {
+            $provide.value('WebSocketService', mockWss);
+        });
+    });
+
+    beforeEach(inject(function (_$log_, _$rootScope_,
+                                FnService, TableBuilderService) {
+        $log = _$log_;
+        $rootScope = _$rootScope_;
+        fs = FnService;
+        tbs = TableBuilderService;
+    }));
+
+    function mockSelCb(event, sel) {}
+
+    beforeEach(function () {
+        mockObj = {
+            self: {},
+            scope: $rootScope.$new(),
+            tag: 'foo',
+            selCb: mockSelCb
+        };
+    });
+
+    afterEach(function () {
+        mockObj = {};
+    });
+
+    it('should define TableBuilderService', function () {
+        expect(tbs).toBeDefined();
+    });
+
+    it('should define api functions', function () {
+        expect(fs.areFunctions(tbs, [
+            'buildTable'
+        ])).toBeTruthy();
+    });
+
+    it('should verify sortCb', function () {
+        spyOn(mockWss, 'sendEvent');
+        expect(mockObj.scope.sortCallback).not.toBeDefined();
+        tbs.buildTable(mockObj);
+        expect(mockObj.scope.sortCallback).toBeDefined();
+        expect(mockWss.sendEvent).toHaveBeenCalled();
+    });
+
+    it('should set tableData', function () {
+        expect(mockObj.self.tableData).not.toBeDefined();
+        tbs.buildTable(mockObj);
+        expect(fs.isA(mockObj.self.tableData)).toBeTruthy();
+        expect(mockObj.self.tableData.length).toBe(0);
+    });
+
+    it('should unbind handlers on destroyed scope', function () {
+        spyOn(mockWss, 'unbindHandlers');
+        tbs.buildTable(mockObj);
+        expect(mockWss.unbindHandlers).not.toHaveBeenCalled();
+        mockObj.scope.$destroy();
+        expect(mockWss.unbindHandlers).toHaveBeenCalled();
+    });
+
+    // TODO: figure out how to test respCb.
+    // should it just be verified by the fact that the callback function
+    // is called by the wss?
+
+});
diff --git a/web/gui/src/main/webapp/tests/app/fw/widget/tooltip-spec.js b/web/gui/src/main/webapp/tests/app/fw/widget/tooltip-spec.js
index a817dbc..0ae1f65 100644
--- a/web/gui/src/main/webapp/tests/app/fw/widget/tooltip-spec.js
+++ b/web/gui/src/main/webapp/tests/app/fw/widget/tooltip-spec.js
@@ -54,6 +54,7 @@
         expect(tts.cancelTooltip()).toBeFalsy();
     });
 
+    // TODO: figure out how to test this
     // testing mouse events is tough
     // showTooltip needs a d3 event, which currently has no test backend
     // .each is a workaround, which provides this, d, and i
diff --git a/web/gui/src/main/webapp/tests/app/view/device/device-spec.js b/web/gui/src/main/webapp/tests/app/view/device/device-spec.js
index 82079fa..c495784 100644
--- a/web/gui/src/main/webapp/tests/app/view/device/device-spec.js
+++ b/web/gui/src/main/webapp/tests/app/view/device/device-spec.js
@@ -20,23 +20,6 @@
 describe('Controller: OvDeviceCtrl', function () {
     var $log, $scope, $controller, ctrl, $mockHttp;
 
-    var fakeData = {
-        "devices": [{
-            "id": "of:0000000000000001",
-            "available": true,
-            "mfr": "Nicira, Inc.",
-            "hw": "Open vSwitch",
-            "sw": "2.0.1"
-        },
-        {
-            "id": "of:0000000000000004",
-            "available": true,
-            "mfr": "Nicira, Inc.",
-            "hw": "Open vSwitch",
-            "sw": "2.0.1"
-        }]
-    };
-
     // instantiate the Device module
     beforeEach(module('ovDevice', 'onosRemote', 'onosLayer', 'onosSvg',
                       'onosNav', 'ngRoute'));
@@ -50,16 +33,6 @@
 
     beforeEach(function() {
         ctrl = $controller('OvDeviceCtrl', { $scope: $scope });
-        $mockHttp.whenGET(/\/device$/).respond(fakeData);
-    });
-
-
-    // TODO: rewrite test to account for websocket
-    xit('should be an empty array and then have device data', function () {
-        expect(ctrl.deviceData).toEqual([]);
-        $scope.sortCallback();
-        $mockHttp.flush();
-        expect(ctrl.deviceData).toEqual(fakeData.devices);
     });
 
 });
diff --git a/web/gui/src/main/webapp/tests/app/view/topo/topoOblique-spec.js b/web/gui/src/main/webapp/tests/app/view/topo/topoOblique-spec.js
index bf07569..2b56329 100644
--- a/web/gui/src/main/webapp/tests/app/view/topo/topoOblique-spec.js
+++ b/web/gui/src/main/webapp/tests/app/view/topo/topoOblique-spec.js
@@ -18,14 +18,16 @@
  ONOS GUI -- Topo View -- Topo Oblique View Service - Unit Tests
  */
 describe('factory: view/topo/topoOblique.js', function() {
-    var $log, fs, tos;
+    var $log, fs, tos, flash;
 
-    beforeEach(module('ovTopo', 'onosUtil'));
+    beforeEach(module('ovTopo', 'onosUtil', 'onosLayer'));
 
-    beforeEach(inject(function (_$log_, FnService, TopoObliqueService) {
+    beforeEach(inject(function (_$log_, FnService,
+                                TopoObliqueService, FlashService) {
         $log = _$log_;
         fs = FnService;
         tos = TopoObliqueService;
+        flash = FlashService;
     }));
 
     it('should define TopoTrafficService', function () {
