diff --git a/js_import.t b/js_import.t
new file mode 100644
index 0000000..52ee795
--- /dev/null
+++ b/js_import.t
@@ -0,0 +1,108 @@
+#!/usr/bin/perl
+
+# (C) Dmitry Volyntsev
+# (c) Nginx, Inc.
+
+# Tests for http njs module, js_import directive.
+
+###############################################################################
+
+use warnings;
+use strict;
+
+use Test::More;
+
+BEGIN { use FindBin; chdir($FindBin::Bin); }
+
+use lib 'lib';
+use Test::Nginx;
+
+###############################################################################
+
+select STDERR; $| = 1;
+select STDOUT; $| = 1;
+
+my $t = Test::Nginx->new()->has(qw/http/)
+	->write_file_expand('nginx.conf', <<'EOF');
+
+%%TEST_GLOBALS%%
+
+daemon off;
+
+events {
+}
+
+http {
+    %%TEST_GLOBALS_HTTP%%
+
+    js_set $test foo.bar.p;
+
+    js_import lib.js;
+    js_import fun.js;
+    js_import foo from ./main.js;
+
+    server {
+        listen       127.0.0.1:8080;
+        server_name  localhost;
+
+        location /njs {
+            js_content foo.version;
+        }
+
+        location /test_foo {
+            js_content foo.test;
+        }
+
+        location /test_lib {
+            js_content lib.test;
+        }
+
+        location /test_fun {
+            js_content fun;
+        }
+
+        location /test_var {
+            return 200 $test;
+        }
+    }
+}
+
+EOF
+
+$t->write_file('lib.js', <<EOF);
+    function test(r) {
+        r.return(200, "LIB-TEST");
+    }
+
+    export default {test};
+
+EOF
+
+$t->write_file('fun.js', <<EOF);
+    export default function (r) {r.return(200, "FUN-TEST")};
+
+EOF
+
+$t->write_file('main.js', <<EOF);
+    function version(r) {
+        r.return(200, njs.version);
+    }
+
+    function test(r) {
+        r.return(200, "MAIN-TEST");
+    }
+
+    export default {version, test, bar: {p(r) {return "P-TEST"}}};
+
+EOF
+
+$t->try_run('no njs available')->plan(4);
+
+###############################################################################
+
+like(http_get('/test_foo'), qr/MAIN-TEST/s, 'foo.test');
+like(http_get('/test_lib'), qr/LIB-TEST/s, 'lib.test');
+like(http_get('/test_fun'), qr/FUN-TEST/s, 'fun');
+like(http_get('/test_var'), qr/P-TEST/s, 'foo.bar.p');
+
+###############################################################################
diff --git a/stream_js_import.t b/stream_js_import.t
new file mode 100644
index 0000000..509aa88
--- /dev/null
+++ b/stream_js_import.t
@@ -0,0 +1,115 @@
+#!/usr/bin/perl
+
+# (C) Dmitry Volyntsev
+# (C) Nginx, Inc.
+
+# Tests for stream njs module, js_import directive.
+
+###############################################################################
+
+use warnings;
+use strict;
+
+use Test::More;
+
+BEGIN { use FindBin; chdir($FindBin::Bin); }
+
+use lib 'lib';
+use Test::Nginx;
+use Test::Nginx::Stream qw/ stream /;
+
+###############################################################################
+
+select STDERR; $| = 1;
+select STDOUT; $| = 1;
+
+my $t = Test::Nginx->new()->has(qw/http stream stream_return/)
+	->write_file_expand('nginx.conf', <<'EOF');
+
+%%TEST_GLOBALS%%
+
+daemon off;
+
+events {
+}
+
+stream {
+    js_set $test foo.bar.p;
+
+    js_import lib.js;
+    js_import foo from ./main.js;
+
+    server {
+        listen  127.0.0.1:8081;
+        return  $test;
+    }
+
+    server {
+        listen      127.0.0.1:8082;
+        js_access   lib.access;
+        js_preread  lib.preread;
+        js_filter   lib.filter;
+        proxy_pass  127.0.0.1:8083;
+    }
+
+    server {
+        listen  127.0.0.1:8083;
+        return  "x";
+    }
+}
+
+EOF
+
+$t->write_file('lib.js', <<EOF);
+    var res = '';
+
+    function access(s) {
+        res += '1';
+        s.allow();
+    }
+
+    function preread(s) {
+        s.on('upload', function (data) {
+            res += '2';
+            if (res.length >= 3) {
+                s.done();
+            }
+        });
+    }
+
+    function filter(s) {
+        s.on('upload', function(data, flags) {
+            s.send(data);
+            res += '3';
+        });
+
+        s.on('download', function(data, flags) {
+            if (!flags.last) {
+                res += '4';
+                s.send(data);
+
+            } else {
+                res += '5';
+                s.send(res, {last:1});
+                s.off('download');
+            }
+        });
+    }
+
+    export default {access, preread, filter};
+
+EOF
+
+$t->write_file('main.js', <<EOF);
+    export default {bar: {p(s) {return "P-TEST"}}};
+
+EOF
+
+$t->try_run('no njs available')->plan(2);
+
+###############################################################################
+
+is(stream('127.0.0.1:' . port(8081))->read(), 'P-TEST', 'foo.bar.p');
+is(stream('127.0.0.1:' . port(8082))->io('0'), 'x122345', 'lib.access');
+
+###############################################################################
