diff --git a/test/fixtures/saythink-and-wait.sb2 b/test/fixtures/saythink-and-wait.sb2
new file mode 100644
index 000000000..d9be202c4
Binary files /dev/null and b/test/fixtures/saythink-and-wait.sb2 differ
diff --git a/test/integration/saythink-and-wait.js b/test/integration/saythink-and-wait.js
new file mode 100644
index 000000000..abde2d978
--- /dev/null
+++ b/test/integration/saythink-and-wait.js
@@ -0,0 +1,37 @@
+const Worker = require('tiny-worker');
+const path = require('path');
+const test = require('tap').test;
+const makeTestStorage = require('../fixtures/make-test-storage');
+const extract = require('../fixtures/extract');
+const VirtualMachine = require('../../src/index');
+const dispatch = require('../../src/dispatch/central-dispatch');
+
+const uri = path.resolve(__dirname, '../fixtures/saythink-and-wait.sb2');
+const project = extract(uri);
+
+// By default Central Dispatch works with the Worker class built into the browser. Tell it to use TinyWorker instead.
+dispatch.workerClass = Worker;
+
+test('say/think and wait', t => {
+    const vm = new VirtualMachine();
+    vm.attachStorage(makeTestStorage());
+
+    // Start VM, load project, and run
+    t.doesNotThrow(() => {
+        vm.start();
+        vm.clear();
+        vm.setCompatibilityMode(false);
+        vm.setTurboMode(false);
+        vm.loadProject(project).then(() => {
+            vm.greenFlag();
+
+            // After two seconds, stop the project.
+            // The test will fail if the project throws.
+            setTimeout(() => {
+                vm.stopAll();
+                t.end();
+                process.nextTick(process.exit);
+            }, 2000);
+        });
+    });
+});