diff --git a/tests/cases/fourslash/importJsNodeModule1.ts b/tests/cases/fourslash/importJsNodeModule1.ts
new file mode 100644
index 00000000000..2c4b6352cb0
--- /dev/null
+++ b/tests/cases/fourslash/importJsNodeModule1.ts
@@ -0,0 +1,18 @@
+///
+
+// @allowJs: true
+// @Filename: node_modules/myMod/index.js
+//// module.exports = { n: 3, s: 'foo', b: true };
+
+// @Filename: consumer.js
+//// var x = require('myMod');
+//// x/**/;
+
+goTo.file('consumer.js');
+goTo.marker();
+edit.insert('.');
+verify.completionListContains("n", /*displayText:*/ undefined, /*documentation*/ undefined, "property");
+verify.completionListContains("s", /*displayText:*/ undefined, /*documentation*/ undefined, "property");
+verify.completionListContains("b", /*displayText:*/ undefined, /*documentation*/ undefined, "property");
+edit.insert('n.');
+verify.completionListContains("toFixed", /*displayText:*/ undefined, /*documentation*/ undefined, "method");
diff --git a/tests/cases/fourslash/importJsNodeModule2.ts b/tests/cases/fourslash/importJsNodeModule2.ts
new file mode 100644
index 00000000000..c8b7c479ddf
--- /dev/null
+++ b/tests/cases/fourslash/importJsNodeModule2.ts
@@ -0,0 +1,23 @@
+///
+
+// @allowJs: true
+
+// @Filename: node_modules/myMod/package.json
+//// {"main": "entry.js"}
+
+
+// @Filename: node_modules/myMod/entry.js
+//// module.exports = { n: 3, s: 'foo', b: true };
+
+// @Filename: consumer.js
+//// var x = require('myMod');
+//// x/**/;
+
+goTo.file('consumer.js');
+goTo.marker();
+edit.insert('.');
+verify.completionListContains("n", /*displayText:*/ undefined, /*documentation*/ undefined, "property");
+verify.completionListContains("s", /*displayText:*/ undefined, /*documentation*/ undefined, "property");
+verify.completionListContains("b", /*displayText:*/ undefined, /*documentation*/ undefined, "property");
+edit.insert('n.');
+verify.completionListContains("toFixed", /*displayText:*/ undefined, /*documentation*/ undefined, "method");
diff --git a/tests/cases/fourslash/importJsNodeModule3.ts b/tests/cases/fourslash/importJsNodeModule3.ts
new file mode 100644
index 00000000000..a48150a4218
--- /dev/null
+++ b/tests/cases/fourslash/importJsNodeModule3.ts
@@ -0,0 +1,31 @@
+///
+
+// @allowJs: true
+
+// @Filename: node_modules/myMod/index.js
+//// exports.n = 3;
+//// exports.s = 'foo';
+//// exports.b = true;
+
+// @Filename: node_modules/anotherMod/index.js
+//// exports.x = 3;
+//// exports.y = 'foo';
+//// exports.z = true;
+
+// @Filename: consumer.js
+//// import * as x from 'myMod';
+//// import {y,z} from 'anotherMod';
+//// x/**/;
+
+goTo.file('consumer.js');
+goTo.marker();
+edit.insert('.');
+verify.completionListContains("n", /*displayText:*/ undefined, /*documentation*/ undefined, "property");
+verify.completionListContains("s", /*displayText:*/ undefined, /*documentation*/ undefined, "property");
+verify.completionListContains("b", /*displayText:*/ undefined, /*documentation*/ undefined, "property");
+edit.insert('n.');
+verify.completionListContains("toFixed", /*displayText:*/ undefined, /*documentation*/ undefined, "method");
+
+edit.backspace(4);
+edit.insert('y.');
+verify.completionListContains("toUpperCase", /*displayText:*/ undefined, /*documentation*/ undefined, "method");
diff --git a/tests/cases/fourslash/importJsNodeModule4.ts b/tests/cases/fourslash/importJsNodeModule4.ts
new file mode 100644
index 00000000000..b4bdc7ce9f7
--- /dev/null
+++ b/tests/cases/fourslash/importJsNodeModule4.ts
@@ -0,0 +1,20 @@
+///
+
+// @allowJs: true
+
+// @Filename: node_modules/myMod/index.js
+//// module.exports = { n: 3, s: 'foo', b: true };
+
+// @Filename: consumer.js
+//// import * as x from 'myMod';
+//// x/**/;
+
+goTo.file('consumer.js');
+goTo.marker();
+edit.insert('.');
+// TODO: Bug: Fix ES6 import of assignments to module.exports
+// verify.completionListContains("n", /*displayText:*/ undefined, /*documentation*/ undefined, "property");
+// verify.completionListContains("s", /*displayText:*/ undefined, /*documentation*/ undefined, "property");
+// verify.completionListContains("b", /*displayText:*/ undefined, /*documentation*/ undefined, "property");
+// edit.insert('n.');
+// verify.completionListContains("toFixed", /*displayText:*/ undefined, /*documentation*/ undefined, "method");