diff --git a/tests/src/actionContainers/ActionContainer.scala b/tests/src/actionContainers/ActionContainer.scala
index c5350a3..1937b3f 100644
--- a/tests/src/actionContainers/ActionContainer.scala
+++ b/tests/src/actionContainers/ActionContainer.scala
@@ -54,7 +54,7 @@
 trait ActionProxyContainerTestUtils extends FlatSpec with Matchers {
     import ActionContainer.{ filterSentinel, sentinel }
 
-    def initPayload(code: String) = JsObject("value" -> JsObject("code" -> JsString(code)))
+    def initPayload(code: String, main: String = "main") = JsObject("value" -> JsObject("code" -> JsString(code), "main" -> JsString(main)))
     def runPayload(args: JsValue, other: Option[JsObject] = None) = {
         JsObject(Map("value" -> args) ++ (other map { _.fields } getOrElse Map()))
     }
diff --git a/tests/src/actionContainers/JavaActionContainerTests.scala b/tests/src/actionContainers/JavaActionContainerTests.scala
index 876f0b4..c8f6c84 100644
--- a/tests/src/actionContainers/JavaActionContainerTests.scala
+++ b/tests/src/actionContainers/JavaActionContainerTests.scala
@@ -33,7 +33,8 @@
 
     // Helpers specific to javaaction
     def withJavaContainer(code: ActionContainer => Unit, env: Map[String, String] = Map.empty) = withContainer("javaaction", env)(code)
-    def initPayload(mainClass: String, jar64: String) = JsObject(
+
+    override def initPayload(mainClass: String, jar64: String) = JsObject(
         "value" -> JsObject(
             "name" -> JsString("dummyAction"),
             "main" -> JsString(mainClass),
diff --git a/tests/src/actionContainers/NodeJsActionContainerTests.scala b/tests/src/actionContainers/NodeJsActionContainerTests.scala
index f33e3e2..00cbf25 100644
--- a/tests/src/actionContainers/NodeJsActionContainerTests.scala
+++ b/tests/src/actionContainers/NodeJsActionContainerTests.scala
@@ -41,14 +41,14 @@
 
     def exec(code: String): NodeJSAbstractExec = NodeJSExec(code)
 
-    override def initPayload(code: String) = {
+    override def initPayload(code: String, main: String = "main") = {
         val e = exec(code)
         JsObject(
             "value" -> JsObject(
                 "name" -> JsString("dummyAction"),
                 "code" -> JsString(e.code),
                 "binary" -> JsBoolean(e.binary),
-                "main" -> JsString("main")))
+                "main" -> JsString(main)))
     }
 
     behavior of nodejsContainerImageName
@@ -513,18 +513,20 @@
         })
     }
 
+    val examplePackageDotJson: String = """
+        | {
+        |   "name": "wskaction",
+        |   "version": "1.0.0",
+        |   "description": "An OpenWhisk action as an npm package.",
+        |   "main": "index.js",
+        |   "author": "info@openwhisk.org",
+        |   "license": "Apache-2.0"
+        | }
+    """.stripMargin
+
     it should "support zip-encoded npm package actions" in {
         val srcs = Seq(
-            Seq("package.json") -> """
-                | {
-                |   "name": "wskaction",
-                |   "version": "1.0.0",
-                |   "description": "An OpenWhisk action as an npm package.",
-                |   "main": "index.js",
-                |   "author": "info@openwhisk.org",
-                |   "license": "Apache-2.0"
-                | }
-            """.stripMargin,
+            Seq("package.json") -> examplePackageDotJson,
             Seq("index.js") -> """
                 | exports.main = function (args) {
                 |     var name = typeof args["name"] === "string" ? args["name"] : "stranger";
@@ -587,4 +589,37 @@
                 (o + e).toLowerCase should include("module_not_found")
         })
     }
+
+    it should "support actions using non-default entry point" in {
+        val (out, err) = withNodeJsContainer { c =>
+            val code = """
+            | function niam(args) {
+            |     return { result: "it works" };
+            | }
+            """.stripMargin
+
+            c.init(initPayload(code, main = "niam"))._1 should be(200)
+            val (runCode, runRes) = c.run(runPayload(JsObject()))
+            runRes.get.fields.get("result") shouldBe Some(JsString("it works"))
+        }
+    }
+
+    it should "support zipped actions using non-default entry point" in {
+        val srcs = Seq(
+            Seq("package.json") -> examplePackageDotJson,
+            Seq("index.js") -> """
+                | exports.niam = function (args) {
+                |     return { result: "it works" };
+                | }
+            """.stripMargin)
+
+        val code = ZipBuilder.mkBase64Zip(srcs)
+
+        val (out, err) = withNodeJsContainer { c =>
+            c.init(initPayload(code, main = "niam"))._1 should be(200)
+
+            val (runCode, runRes) = c.run(runPayload(JsObject()))
+            runRes.get.fields.get("result") shouldBe Some(JsString("it works"))
+        }
+    }
 }
