diff --git a/tests/JavaScriptTest.js b/tests/JavaScriptTest.js
index 7116daa..2d7afc5 100644
--- a/tests/JavaScriptTest.js
+++ b/tests/JavaScriptTest.js
@@ -3,8 +3,12 @@
 var fs = require('fs');
 
 var flatbuffers = require('../js/flatbuffers').flatbuffers;
+global.flatbuffers = flatbuffers;
+
 var MyGame = require(process.argv[2]).MyGame;
 
+var isTsTest = !!process.env.FB_TS_TEST; 
+
 function main() {
 
   // First, let's test reading a FlatBuffer generated by C++ code:
@@ -24,6 +28,10 @@
   createMonster(fbb);
   serializeAndTest(fbb);
 
+  if(isTsTest) {
+    testObjApiPack(fbb);
+  }
+  
   // clear the builder, repeat tests
   var clearIterations = 100;
   var startingCapacity = fbb.bb.capacity();
@@ -31,6 +39,10 @@
     fbb.clear();
     createMonster(fbb);
     serializeAndTest(fbb);
+
+    if(isTsTest) {
+      testObjApiPack(fbb);
+    }
   }
   // the capacity of our buffer shouldn't increase with the same size payload
   assert.strictEqual(fbb.bb.capacity(), startingCapacity);
@@ -38,7 +50,9 @@
   test64bit();
   testUnicode();
   fuzzTest1();
-
+  testNullStrings();
+  testSharedStrings();
+  
   console.log('FlatBuffers test: completed successfully');
 }
 
@@ -109,6 +123,56 @@
   // TODO: There is not the availability to mutate structs or vectors.
 }
 
+function testObjApiPack(fbb) {
+  fbb.clear();
+  createMonster(fbb);
+  let monster_t = MyGame.Example.Monster.getRootAsMonster(fbb.dataBuffer()).unpack();
+  fbb.clear();
+  MyGame.Example.Monster.finishMonsterBuffer(fbb, monster_t.pack(fbb));
+  serializeAndTest(fbb);
+}
+
+function testObjApiUnpack(monster) {
+  assert.strictEqual(monster.hp, 80);
+  assert.strictEqual(monster.mana, 150); // default
+
+  assert.strictEqual(monster.name, 'MyMonster');
+
+  let pos = monster.pos;
+  assert.strictEqual(pos.x, 1);
+  assert.strictEqual(pos.y, 2);
+  assert.strictEqual(pos.z, 3);
+  assert.strictEqual(pos.test1, 3);
+  assert.strictEqual(pos.test2, MyGame.Example.Color.Green);
+  let test3 = pos.test3;
+  assert.strictEqual(test3.a, 5);
+  assert.strictEqual(test3.b, 6);
+
+  assert.strictEqual(monster.testType, MyGame.Example.Any.Monster);
+  let monster2 = monster.test;
+  assert.strictEqual(monster2 != null, true);
+  assert.strictEqual(monster2 instanceof MyGame.Example.MonsterT, true);
+  assert.strictEqual(monster2.name, 'Fred');
+
+  assert.strictEqual(monster.inventory.length, 5);
+  let invsum = 0;
+  for (let i = 0; i < monster.inventory.length; i++) {
+    invsum += monster.inventory[i];
+  }
+  assert.strictEqual(invsum, 10);
+
+  let test_0 = monster.test4[0];
+  let test_1 = monster.test4[1];
+  assert.strictEqual(monster.test4.length, 2);
+  assert.strictEqual(test_0.a + test_0.b + test_1.a + test_1.b, 100);
+
+  assert.strictEqual(monster.testarrayofstring.length, 2);
+  assert.strictEqual(monster.testarrayofstring[0], 'test1');
+  assert.strictEqual(monster.testarrayofstring[1], 'test2');
+
+  assert.strictEqual(monster.testbool, true);
+}
+
 function testBuffer(bb) {
   assert.ok(MyGame.Example.Monster.bufferHasIdentifier(bb));
 
@@ -158,6 +222,15 @@
   assert.strictEqual(monster.testarrayofstring(1), 'test2');
 
   assert.strictEqual(monster.testbool(), true);
+
+  if(isTsTest) {
+    let monster_t = monster.unpack();
+    testObjApiUnpack(monster_t);
+
+    let monster2_t = new MyGame.Example.MonsterT();
+    monster.unpackTo(monster2_t);
+    testObjApiUnpack(monster2_t);
+  }
 }
 
 function test64bit() {
@@ -366,4 +439,19 @@
   }
 }
 
+function testSharedStrings() {
+  var shared_string = "Hello world";
+  var builder = new flatbuffers.Builder();
+  let mainOffset = builder.createSharedString(shared_string);
+  assert.strictEqual(builder.createSharedString(shared_string), mainOffset);
+}
+
+function testNullStrings() {
+  var builder = new flatbuffers.Builder();
+  assert.strictEqual(builder.createString(null), 0);
+  assert.strictEqual(builder.createSharedString(null), 0);
+  assert.strictEqual(builder.createString(undefined), 0);
+  assert.strictEqual(builder.createSharedString(undefined), 0);
+}
+
 main();
