diff --git a/bin/run.js b/bin/run.js
index <HASH>..<HASH> 100755
--- a/bin/run.js
+++ b/bin/run.js
@@ -111,10 +111,15 @@ function main () {
 }
 
 function constructDefaultArgs () {
+  var defaultTimeout = 30
+  if (global.__coverage__) {
+    defaultTimeout = 240
+  }
+
   var defaultArgs = {
     nodeArgs: [],
     nycArgs: [],
-    timeout: process.env.TAP_TIMEOUT || 30,
+    timeout: +process.env.TAP_TIMEOUT || defaultTimeout,
     color: supportsColor,
     reporter: null,
     files: [],
@@ -131,10 +136,6 @@ function constructDefaultArgs () {
     statements: 0
   }
 
-  if (global.__coverage__) {
-    defaultArgs.timeout = 240
-  }
-
   if (process.env.TAP_COLORS !== undefined) {
     defaultArgs.color = !!(+process.env.TAP_COLORS)
   }
diff --git a/test/rcfiles.js b/test/rcfiles.js
index <HASH>..<HASH> 100644
--- a/test/rcfiles.js
+++ b/test/rcfiles.js
@@ -31,7 +31,10 @@ var defaults = {
 }
 
 function runTest (rcFile, expect) { return function (t) {
-  var env = { HOME: process.env.HOME }
+  var env = {
+    HOME: process.env.HOME,
+    TAP_TIMEOUT: 30
+  }
 
   if (rcFile) {
     env.TAP_RCFILE = rcFile
hard-code TAP_TIMEOUT in rcfiles test

Otherwise running with coverage fails, because of bigger default