diff --git a/.travis.yml b/.travis.yml
index 64f658d..7e654f3 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -48,6 +48,10 @@
  - sudo apt-get install -qq ghc6 cabal-install libghc6-binary-dev libghc6-network-dev libghc6-http-dev
 # Thrift Compiler for Windows
  - sudo apt-get install -qq mingw32 mingw32-binutils mingw32-runtime
+# node.js
+ - sudo apt-get install -qq nodejs npm
+ - sudo npm install nodeunit -g
+ - cd lib/nodejs; npm install; cd ../..
 
 
 install:
@@ -66,4 +70,3 @@
 # TODO: add these steps
 #  - sh bootstrap.sh ; sh contrib/mingw-cross-compile.sh
 #  - sh bootstrap.sh ; dpkg-buildpackage -tc
-
diff --git a/lib/nodejs/package.json b/lib/nodejs/package.json
index b3f7b20..c57a07b 100755
--- a/lib/nodejs/package.json
+++ b/lib/nodejs/package.json
@@ -25,6 +25,7 @@
   "main": "./lib/thrift",
   "engines": { "node": ">= 0.2.4" },
   "dependencies": {
-    "node-int64": "0.3.x"
+    "node-int64": "~0.3.0",
+    "nodeunit": "~0.8.0"
   }
 }
diff --git a/test/nodejs/Makefile.am b/test/nodejs/Makefile.am
index 06e2eec..2c0a18f 100755
--- a/test/nodejs/Makefile.am
+++ b/test/nodejs/Makefile.am
@@ -28,8 +28,8 @@
 	fi
 	@if which node &> /dev/null ; then \
 		echo "   Testing Client/Server"; \
-		timeout 2 $(MAKE) server & \
-		sleep 1; $(MAKE) client; sleep 1; \
+		timeout -s14 3 $(MAKE) server & \
+		sleep 1; $(MAKE) client; sleep 2; \
 	fi
 
 clean-local:
diff --git a/test/nodejs/client.js b/test/nodejs/client.js
index 8e19b88..ea2cc38 100644
--- a/test/nodejs/client.js
+++ b/test/nodejs/client.js
@@ -31,7 +31,7 @@
   assert(false, err);
 });
 
- // deepEqual doesn't work for binary64
+ // deepEqual doesn't work with fields using node-int64
 function checkRecursively(map1, map2) {
   if (typeof map1 !== 'function' && typeof map2 !== 'function') {
     if (!map1 || typeof map1 !== 'object') {
@@ -47,7 +47,7 @@
 
 client.testVoid(function(err, response) {
   assert( ! err);
-  assert.equal(undefined, response);
+  assert.equal(undefined, response); //void
 });
 
 
@@ -83,6 +83,18 @@
   assert( ! err);
   assert.equal(1, response);
 });
+client.testByte(0, function(err, response) {
+  assert( ! err);
+  assert.equal(0, response);
+});
+client.testByte(-1, function(err, response) {
+  assert( ! err);
+  assert.equal(-1, response);
+});
+client.testByte(-127, function(err, response) {
+  assert( ! err);
+  assert.equal(-127, response);
+});
 
 client.testI32(-1, function(err, response) {
   assert( ! err);
@@ -93,12 +105,10 @@
   assert( ! err);
   assert.equal(5, response);
 });
-
 client.testI64(-5, function(err, response) {
   assert( ! err);
   assert.equal(-5, response);
 });
-
 client.testI64(-34359738368, function(err, response) {
   assert( ! err);
   assert.equal(-34359738368, response);
@@ -108,7 +118,6 @@
   assert( ! err);
   assert.equal(-5.2098523, response);
 });
-
 client.testDouble(7.012052175215044, function(err, response) {
   assert( ! err);
   assert.equal(7.012052175215044, response);
@@ -126,6 +135,7 @@
   checkRecursively(out, response);
 });
 
+
 var out2 = new ttypes.Xtruct2();
 out2.byte_thing = 1;
 out2.struct_thing = out;
@@ -135,6 +145,7 @@
   checkRecursively(out2, response);
 });
 
+
 var mapout = {};
 for (var i = 0; i < 5; ++i) {
   mapout[i] = i-10;
@@ -144,27 +155,103 @@
   assert.deepEqual(mapout, response);
 });
 
-/*
- * TODO: testSet, testList, testEnum, testTypedef, testMapMap, testInsanity
- */
 
-
-client.testException('ApplicationException', function(err, response) {
-  //assert.equal('ApplicationException', err);
-  assert( ! response);
-});
-
-client.testException('Xception', function(err, response) {
-  assert.equal('Xception', err.message);
-  assert( ! response);
-});
-
-client.testException('success', function(err, response) {
+var mapTestInput = {
+  "a":"123", "a b":"with spaces ", "same":"same", "0":"numeric key",
+  "longValue":stringTest, stringTest:"long key"
+};
+client.testStringMap(mapTestInput, function(err, response) {
   assert( ! err);
-  //assert.equal('success', response);
+  assert.deepEqual(mapTestInput, response);
 });
 
 
+var setTestInput = [1,2,3];
+client.testSet(setTestInput, function(err, response) {
+  assert( ! err);
+  assert.deepEqual(setTestInput, response);
+});
+client.testList(setTestInput, function(err, response) {
+  assert( ! err);
+  assert.deepEqual(setTestInput, response);
+});
+
+client.testEnum(ttypes.Numberz.ONE, function(err, response) {
+  assert( ! err);
+  assert.equal(ttypes.Numberz.ONE, response);
+});
+
+client.testTypedef(69, function(err, response) {
+  assert( ! err);
+  assert.equal(69, response);
+});
+
+
+var mapMapTest = {
+  "4": {"1":1, "2":2, "3":3, "4":4},
+  "-4": {"-4":-4, "-3":-3, "-2":-2, "-1":-1}
+};
+client.testMapMap(mapMapTest, function(err, response) {
+  assert( ! err);
+  assert.deepEqual(mapMapTest, response);
+});
+
+var crazy = new ttypes.Insanity({
+  "userMap":{ "5":5, "8":8 },
+  "xtructs":[new ttypes.Xtruct({
+      "string_thing":"Goodbye4",
+      "byte_thing":4,
+      "i32_thing":4,
+      "i64_thing":4
+    }), new ttypes.Xtruct({
+      "string_thing":"Hello2",
+      "byte_thing":2,
+      "i32_thing":2,
+      "i64_thing":2
+    })]
+});
+var insanity = {
+  "1":{ "2": crazy, "3": crazy },
+  "2":{ "6":{ "userMap":null, "xtructs":null } }
+};
+client.testInsanity(crazy, function(err, response) {
+  assert( ! err);
+  checkRecursively(insanity, response);
+});
+
+
+client.testException('TException', function(err, response) {
+  //assert(err); //BUG?
+  assert( ! response);
+});
+client.testException('Xception', function(err, response) {
+  assert( ! response);
+  assert.equal(err.errorCode, 1001);
+  assert.equal('Xception', err.message);
+});
+client.testException('no Exception', function(err, response) {
+  assert( ! err);
+  assert.equal(undefined, response); //void
+});
+
+
+client.testOneway(1, function(err, response) {
+  assert(false); //should not answer
+});
+
+/**
+ * redo a simple test after the oneway to make sure we aren't "off by one" --
+ * if the server treated oneway void like normal void, this next test will
+ * fail since it will get the void confirmation rather than the correct
+ * result. In this circumstance, the client will throw the exception:
+ *
+ *   TApplicationException: Wrong method namea
+ */
+client.testI32(-1, function(err, response) {
+  assert( ! err);
+  assert.equal(-1, response);
+});
+
 setTimeout(function() {
   console.log("Server successfully tested!");
   connection.end();
diff --git a/test/nodejs/server.js b/test/nodejs/server.js
index 056209d..06724e6 100644
--- a/test/nodejs/server.js
+++ b/test/nodejs/server.js
@@ -123,7 +123,9 @@
   },
 
   testInsanity: function(argument, result) {
-    console.log('testInsanity()');
+    console.log('testInsanity(');
+    console.log(argument);
+    console.log(')');
 
     var hello = new ttypes.Xtruct();
     hello.string_thing = 'Hello2';
@@ -141,9 +143,7 @@
     crazy.userMap = [];
     crazy.userMap[ttypes.Numberz.EIGHT] = 8;
     crazy.userMap[ttypes.Numberz.FIVE] = 5;
-    crazy.xtructs = [];
-    crazy.xtructs.add(goodbye);
-    crazy.xtructs.add(hello);
+    crazy.xtructs = [goodbye, hello];
 
     var first_map = [];
     var second_map = [];
@@ -158,6 +158,8 @@
     insane[1] = first_map;
     insane[2] = second_map;
 
+    console.log('insane result:');
+    console.log(insane);
     result(null, insane);
   },
 
@@ -179,31 +181,29 @@
       x.errorCode = 1001;
       x.message = arg;
       result(x);
-    } else if (arg === 'ApplicationException') {
+    } else if (arg === 'TException') {
       result(new Thrift.TException(arg));
     } else {
-      var res = new ttypes.Xtruct();
-      res.string_thing = arg;
-			result(null, res);
+      result(null);
     }
   },
 
   testMultiException: function(arg0, arg1, result) {
     console.log('testMultiException(' + arg0 + ', ' + arg1 + ')');
     if (arg0 === ('Xception')) {
-      var x = new Xception();
+      var x = new ttypes.Xception();
       x.errorCode = 1001;
       x.message = 'This is an Xception';
       result(x);
     } else if (arg0 === ('Xception2')) {
-      var x = new Xception2();
+      var x = new ttypes.Xception2();
       x.errorCode = 2002;
-      x.struct_thing = new Xtruct();
+      x.struct_thing = new ttypes.Xtruct();
       x.struct_thing.string_thing = 'This is an Xception2';
       result(x);
     }
 
-    var res = new Xtruct();
+    var res = new ttypes.Xtruct();
     res.string_thing = arg1;
     result(null, res);
   },
@@ -211,9 +211,8 @@
   testOneway: function(sleepFor, result) {
     console.log('testOneway(' + sleepFor + ') => sleeping...');
     setTimeout(function(){
-      console.log('Done sleeping!');
-    }, sleepFor);
-		result(null);
+      console.log('Done sleeping for testOneway!');
+    }, sleepFor*1000); //seconds
   }
 });
 
diff --git a/test/test.sh b/test/test.sh
index 76301c1..351fa1c 100755
--- a/test/test.sh
+++ b/test/test.sh
@@ -221,7 +221,7 @@
 do_test "nodejs-nodejs" "binary" "framed-ip" \
         "make -C nodejs/ client" \
         "make -C nodejs/ server" \
-        "1" "10"
+        "1" "5"
 do_test "nodejs-cpp" "binary" "framed-ip" \
         "make -C nodejs/ client" \
         "cpp/TestServer --transport=framed" \
@@ -229,6 +229,6 @@
 do_test "cpp-nodejs" "binary" "framed-ip" \
         "cpp/TestClient --transport=framed" \
         "make -C nodejs/ server" \
-        "1" "10"
+        "1" "5"
 
 cd -
