diff --git a/packages/react-scripts/fixtures/kitchensink/.template.dependencies.json b/packages/react-scripts/fixtures/kitchensink/.template.dependencies.json
index a20139318c1797e03c5892c30ab25137292b3065..ad2da83e1976b88156e135f65f60d120e16fca67 100644
--- a/packages/react-scripts/fixtures/kitchensink/.template.dependencies.json
+++ b/packages/react-scripts/fixtures/kitchensink/.template.dependencies.json
@@ -5,6 +5,7 @@
     "babel-polyfill": "6.20.0",
     "chai": "3.5.0",
     "jsdom": "9.8.3",
-    "mocha": "3.2.0"
+    "mocha": "3.2.0",
+    "test-integrity": "1.0.0"
   }
 }
diff --git a/packages/react-scripts/fixtures/kitchensink/integration/webpack.test.js b/packages/react-scripts/fixtures/kitchensink/integration/webpack.test.js
index 031786e0ee7da91cf28da49d8e0f3b259c621a5d..bda69cc61afc75a62350cd947bcc7602ff348976 100644
--- a/packages/react-scripts/fixtures/kitchensink/integration/webpack.test.js
+++ b/packages/react-scripts/fixtures/kitchensink/integration/webpack.test.js
@@ -44,6 +44,14 @@ describe('Integration', () => {
       );
     });
 
+    it('linked modules', async () => {
+      const doc = await initDOM('linked-modules');
+
+      expect(doc.getElementById('feature-linked-modules').textContent).to.equal(
+        '2.0.0'
+      );
+    });
+
     it('svg inclusion', async () => {
       const doc = await initDOM('svg-inclusion');
 
diff --git a/packages/react-scripts/fixtures/kitchensink/src/App.js b/packages/react-scripts/fixtures/kitchensink/src/App.js
index 67de182b59e22d9e84c6b5974dea4b6f1244f28c..4edfcba9391dd4e13199cfdeaf4eb58b0db6d641 100644
--- a/packages/react-scripts/fixtures/kitchensink/src/App.js
+++ b/packages/react-scripts/fixtures/kitchensink/src/App.js
@@ -111,6 +111,10 @@ class App extends Component {
         import('./features/webpack/JsonInclusion').then(f =>
           this.setFeature(f.default));
         break;
+      case 'linked-modules':
+        import('./features/webpack/LinkedModules').then(f =>
+          this.setFeature(f.default));
+        break;
       case 'node-path':
         import('./features/env/NodePath').then(f => this.setFeature(f.default));
         break;
diff --git a/packages/react-scripts/fixtures/kitchensink/src/features/webpack/LinkedModules.js b/packages/react-scripts/fixtures/kitchensink/src/features/webpack/LinkedModules.js
new file mode 100644
index 0000000000000000000000000000000000000000..de8a5e4ab5b133d90bdb0bcacfea0caac996169a
--- /dev/null
+++ b/packages/react-scripts/fixtures/kitchensink/src/features/webpack/LinkedModules.js
@@ -0,0 +1,20 @@
+/**
+ * Copyright (c) 2015-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ */
+
+import React from 'react';
+import './assets/style.css';
+import { test, version } from 'test-integrity';
+
+export default () => {
+  const v = version();
+  if (!test() || v !== '2.0.0') {
+    throw new Error('Functionality test did not pass.');
+  }
+  return <p id="feature-linked-modules">{v}</p>;
+};
diff --git a/packages/react-scripts/fixtures/kitchensink/src/features/webpack/LinkedModules.test.js b/packages/react-scripts/fixtures/kitchensink/src/features/webpack/LinkedModules.test.js
new file mode 100644
index 0000000000000000000000000000000000000000..aa1e911ae457be3914396525f324c0798932e82a
--- /dev/null
+++ b/packages/react-scripts/fixtures/kitchensink/src/features/webpack/LinkedModules.test.js
@@ -0,0 +1,25 @@
+/**
+ * Copyright (c) 2015-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ */
+
+import React from 'react';
+import ReactDOM from 'react-dom';
+import { test, version } from 'test-integrity';
+import LinkedModules from './LinkedModules';
+
+describe('linked modules', () => {
+  it('has integrity', () => {
+    expect(test());
+    expect(version() === '2.0.0');
+  });
+
+  it('renders without crashing', () => {
+    const div = document.createElement('div');
+    ReactDOM.render(<LinkedModules />, div);
+  });
+});
diff --git a/tasks/e2e-kitchensink.sh b/tasks/e2e-kitchensink.sh
index becd88282c1aa96837b4eb3732dbfa0e608ff99a..afc36e1a36878f188a898c52089c44d0838b28f9 100755
--- a/tasks/e2e-kitchensink.sh
+++ b/tasks/e2e-kitchensink.sh
@@ -14,17 +14,18 @@
 # Start in tasks/ even if run from root directory
 cd "$(dirname "$0")"
 
-# CLI and app temporary locations
+# CLI, app, and test module temporary locations
 # http://unix.stackexchange.com/a/84980
 temp_cli_path=`mktemp -d 2>/dev/null || mktemp -d -t 'temp_cli_path'`
 temp_app_path=`mktemp -d 2>/dev/null || mktemp -d -t 'temp_app_path'`
+temp_module_path=`mktemp -d 2>/dev/null || mktemp -d -t 'temp_module_path'`
 
 function cleanup {
   echo 'Cleaning up.'
   ps -ef | grep 'react-scripts' | grep -v grep | awk '{print $2}' | xargs kill -s 9
   cd "$root_path"
   # TODO: fix "Device or resource busy" and remove ``|| $CI`
-  rm -rf "$temp_cli_path" $temp_app_path || $CI
+  rm -rf "$temp_cli_path" "$temp_app_path" "$temp_module_path" || $CI
 }
 
 # Error messages are redirected to stderr
@@ -111,17 +112,24 @@ npm install "$cli_path"
 cd $temp_app_path
 create_react_app --scripts-version="$scripts_path" --internal-testing-template="$root_path"/packages/react-scripts/fixtures/kitchensink test-kitchensink
 
+# Install the test module
+cd "$temp_module_path"
+npm install test-integrity@^2.0.1
+
 # ******************************************************************************
 # Now that we used create-react-app to create an app depending on react-scripts,
 # let's make sure all npm scripts are in the working state.
 # ******************************************************************************
 
 # Enter the app directory
-cd test-kitchensink
+cd "$temp_app_path/test-kitchensink"
 
 # Link to our preset
 npm link "$root_path"/packages/babel-preset-react-app
 
+# Link to test module
+npm link "$temp_module_path/node_modules/test-integrity"
+
 # Test the build
 REACT_APP_SHELL_ENV_MESSAGE=fromtheshell \
   NODE_PATH=src \
@@ -183,6 +191,9 @@ npm link "$root_path"/packages/eslint-config-react-app
 npm link "$root_path"/packages/react-dev-utils
 npm link "$root_path"/packages/react-scripts
 
+# Link to test module
+npm link "$temp_module_path/node_modules/test-integrity"
+
 # Test the build
 REACT_APP_SHELL_ENV_MESSAGE=fromtheshell \
   NODE_PATH=src \