From 2bb2b9fa35818db7a02e5068364b0c417436b1af Mon Sep 17 00:00:00 2001
From: Christopher Hiller <boneskull@boneskull.com>
Date: Sun, 9 Oct 2016 22:37:21 -0700
Subject: [PATCH] lint the hell out of the javascript; closes #2525

- mostly whitespace changes
- add `'use strict';` everywhere
- fix problems with unused variables, bad variable names, multiple declarations, unreachable code, yoda expressions, error handling, instantiation, etc.
- add a few eslint directives to avoid rules when needed
- switch to YAML eslint configs
- remove `test/` from `.eslintignore`
- add `mocha.js` to `.eslintignore`
- add userland `assert` as dev dependency (as is recommended)
- rename `test/fixture-expect.js` to `test/setup.js`; add global `assert` here
- add `assert` and `run` globals to `test/`'s eslint config
- update `test/mocha.opts` as appropriate
- update `lint` target in `Makefile`
- update eslint environments as appropriate
---
 .eslintignore                                 |   5 +-
 .eslintrc.js                                  |   3 -
 .eslintrc.yaml                                |  11 +
 Makefile                                      |   2 +-
 bin/_mocha                                    |   1 +
 bin/mocha                                     |   2 +
 bin/options.js                                |  12 +-
 browser-entry.js                              |   3 +
 lib/browser/.eslintrc.yaml                    |   4 +
 lib/browser/debug.js                          |   9 +-
 lib/browser/events.js                         |   2 +
 lib/browser/progress.js                       |   2 +
 lib/browser/tty.js                            |   2 +
 lib/context.js                                |   2 +
 lib/hook.js                                   |   2 +
 lib/interfaces/bdd.js                         |   2 +
 lib/interfaces/exports.js                     |   2 +
 lib/interfaces/index.js                       |   2 +
 lib/interfaces/qunit.js                       |   2 +
 lib/interfaces/tdd.js                         |   2 +
 lib/mocha.js                                  |   2 +
 lib/ms.js                                     |   2 +
 lib/pending.js                                |   1 +
 lib/reporters/base.js                         |   2 +
 lib/reporters/doc.js                          |   2 +
 lib/reporters/dot.js                          |   2 +
 lib/reporters/html.js                         |   2 +
 lib/reporters/index.js                        |   2 +
 lib/reporters/json-stream.js                  |   2 +
 lib/reporters/json.js                         |   2 +
 lib/reporters/landing.js                      |   2 +
 lib/reporters/list.js                         |   2 +
 lib/reporters/markdown.js                     |   2 +
 lib/reporters/min.js                          |   2 +
 lib/reporters/nyan.js                         |   2 +
 lib/reporters/progress.js                     |   2 +
 lib/reporters/spec.js                         |   2 +
 lib/reporters/tap.js                          |   2 +
 lib/reporters/xunit.js                        |   2 +
 lib/runnable.js                               |   2 +
 lib/runner.js                                 |   2 +
 lib/suite.js                                  |   2 +
 lib/test.js                                   |   2 +
 lib/utils.js                                  |   2 +
 package.json                                  |   1 +
 test/.eslintrc.js                             |   8 -
 test/.eslintrc.yaml                           |   7 +
 test/acceptance/context.spec.js               |  81 ++--
 test/acceptance/duration.spec.js              |  36 +-
 test/acceptance/fs.spec.js                    |  24 +-
 test/acceptance/glob/glob.spec.js             |   8 +-
 test/acceptance/globals.spec.js               |  22 +-
 test/acceptance/http.spec.js                  |  18 +-
 test/acceptance/interfaces/bdd.spec.js        |  42 +-
 test/acceptance/interfaces/exports.spec.js    |  45 +-
 test/acceptance/interfaces/qunit.spec.js      |  20 +-
 test/acceptance/interfaces/tdd.spec.js        |  20 +-
 test/acceptance/lookup-files.spec.js          |  14 +-
 test/acceptance/misc/exit.spec.js             |  22 +-
 test/acceptance/misc/many.spec.js             |  23 +-
 test/acceptance/misc/nontty.spec.js           |  16 +-
 test/acceptance/misc/only/bdd-require.spec.js |  12 +-
 test/acceptance/misc/only/bdd.spec.js         |  78 ++--
 test/acceptance/misc/only/global/bdd.spec.js  |  10 +-
 .../acceptance/misc/only/global/qunit.spec.js |  10 +-
 test/acceptance/misc/only/global/tdd.spec.js  |  10 +-
 test/acceptance/misc/only/qunit.spec.js       |  36 +-
 test/acceptance/misc/only/tdd.spec.js         |  78 ++--
 test/acceptance/overspecified-async.spec.js   |   6 +-
 test/acceptance/require/a.js                  |   6 +-
 test/acceptance/require/c.js                  |   6 +-
 test/acceptance/require/require.spec.js       |   8 +-
 test/acceptance/required-tokens.spec.js       |   6 +-
 test/acceptance/root.spec.js                  |  14 +-
 test/acceptance/throw.spec.js                 |  72 ++--
 test/acceptance/timeout.spec.js               |  72 ++--
 test/acceptance/utils.spec.js                 | 302 +++++++-------
 test/browser-fixtures/bdd.fixture.js          |   2 +
 test/browser-fixtures/exports.fixture.js      |   2 +
 test/browser-fixtures/qunit.fixture.js        |   2 +
 test/browser-fixtures/tdd.fixture.js          |   2 +
 test/browser/array.spec.js                    |  59 +--
 test/browser/grep.spec.js                     |  76 ++--
 test/browser/large.spec.js                    |  49 +--
 test/browser/multiple-done.spec.js            |  18 +-
 test/browser/opts.spec.js                     |   8 +-
 test/browser/stack-trace.spec.js              |  30 +-
 test/browser/ui.spec.js                       |  14 +-
 test/color.spec.js                            |  10 +-
 test/compiler/foo.js                          |   8 +-
 test/fixture-expect.js                        |   1 -
 test/grep.spec.js                             |  42 +-
 test/hook-async.spec.js                       | 186 +++++----
 test/hook-sync-nested.spec.js                 | 134 +++---
 test/hook-sync.spec.js                        | 148 +++----
 test/hook-timeout.spec.js                     |   8 +-
 test/http-meta-2.spec.js                      |  53 +--
 test/http-meta.spec.js                        |  46 ++-
 test/integration/diffs.spec.js                |  24 +-
 test/integration/fixtures/cascade.fixture.js  |  34 +-
 .../fixtures/diffs/diffs.fixture.js           |  71 +++-
 .../hooks/after-hook-async-error.fixture.js   |   2 +
 .../hooks/after-hook-error.fixture.js         |   2 +
 .../afterEach-hook-async-error.fixture.js     |   2 +
 .../hooks/afterEach-hook-error.fixture.js     |   2 +
 .../before-hook-async-error-tip.fixture.js    |  10 +-
 .../hooks/before-hook-async-error.fixture.js  |   2 +
 .../hooks/before-hook-error-tip.fixture.js    |  10 +-
 .../hooks/before-hook-error.fixture.js        |   2 +
 .../beforeEach-hook-async-error.fixture.js    |   2 +
 .../hooks/beforeEach-hook-error.fixture.js    |   2 +
 .../multiple-hook-async-error.fixture.js      |   2 +
 .../hooks/multiple-hook-error.fixture.js      |   2 +
 .../fixtures/multiple-done-before.fixture.js  |   8 +-
 .../multiple-done-beforeEach.fixture.js       |  10 +-
 .../fixtures/multiple-done-specs.fixture.js   |   8 +-
 .../fixtures/multiple-done.fixture.js         |   6 +-
 .../options/async-only-async.fixture.js       |   4 +-
 .../options/async-only-sync.fixture.js        |   4 +-
 .../fixtures/options/bail.fixture.js          |  16 +-
 .../fixtures/options/delay-fail.fixture.js    |   7 +-
 .../fixtures/options/delay.fixture.js         |  10 +-
 .../fixtures/options/grep.fixture.js          |  20 +-
 .../fixtures/options/only/bdd.fixture.js      |  51 +--
 .../fixtures/options/only/qunit.fixture.js    |  21 +-
 .../fixtures/options/only/tdd.fixture.js      |  30 +-
 .../fixtures/options/retries.fixture.js       |   4 +-
 .../fixtures/options/sort-alpha.fixture.js    |   6 +-
 .../fixtures/options/sort-beta.fixture.js     |   6 +-
 test/integration/fixtures/passing.fixture.js  |   8 +-
 .../pending/skip-async-before.fixture.js      |  12 +-
 .../pending/skip-async-beforeEach.fixture.js  |  12 +-
 .../pending/skip-async-spec.fixture.js        |  10 +-
 .../pending/skip-sync-before.fixture.js       |  10 +-
 .../pending/skip-sync-beforeEach.fixture.js   |  10 +-
 .../pending/skip-sync-spec.fixture.js         |   8 +-
 .../fixtures/pending/spec.fixture.js          |   4 +-
 .../regression/1794/issue-1794.fixture.js     |   4 +-
 .../fixtures/regression/1794/simple-ui.js     |  15 +-
 .../fixtures/regression/issue-1327.fixture.js |  12 +-
 .../fixtures/regression/issue-1417.js         |   8 +-
 .../fixtures/regression/issue-1991.fixture.js |  18 +-
 .../fixtures/regression/issue-2315.js         |   2 +
 .../fixtures/regression/issue-2406.fixture.js |  22 +-
 .../fixtures/regression/issue-2417.fixture.js |   8 +-
 .../fixtures/retries/async.fixture.js         |   6 +-
 .../fixtures/retries/early-pass.fixture.js    |   6 +-
 .../fixtures/retries/hooks.fixture.js         |   8 +-
 .../fixtures/retries/nested.fixture.js        |   6 +-
 .../suite/suite-no-callback.fixture.js        |   2 +
 .../suite/suite-skipped-callback.fixture.js   |   2 +
 .../suite-skipped-no-callback.fixture.js      |   2 +
 test/integration/fixtures/timeout.fixture.js  |  10 +-
 .../fixtures/uncaught-hook.fixture.js         |  14 +-
 test/integration/fixtures/uncaught.fixture.js |  14 +-
 test/integration/helpers.js                   |  38 +-
 test/integration/hook-err.spec.js             |  66 +--
 test/integration/hooks.spec.js                |  18 +-
 test/integration/multiple-done.spec.js        |  50 +--
 test/integration/only.spec.js                 |  22 +-
 test/integration/options.spec.js              |  77 ++--
 test/integration/pending.spec.js              |  54 +--
 test/integration/regression.spec.js           |  48 ++-
 test/integration/reporters.spec.js            |  30 +-
 test/integration/retries.spec.js              |  28 +-
 test/integration/suite.spec.js                |  25 +-
 test/integration/timeout.spec.js              |  12 +-
 test/integration/uncaught.spec.js             |  16 +-
 test/jsapi/index.js                           |   9 +-
 test/mocha.opts                               |   2 +-
 test/mocha.spec.js                            |  34 +-
 test/ms.spec.js                               |  42 +-
 test/reporters/base.spec.js                   |  55 ++-
 test/reporters/json.spec.js                   |  78 ++--
 test/reporters/nyan.spec.js                   |  21 +-
 test/runnable.spec.js                         | 386 +++++++++---------
 test/runner.spec.js                           | 146 +++----
 test/sanity/sanity.spec.js                    |   4 +-
 test/setup.js                                 |   4 +
 test/suite.spec.js                            | 249 +++++------
 test/test.spec.js                             |  45 +-
 test/utils.spec.js                            | 100 ++---
 182 files changed, 2397 insertions(+), 2025 deletions(-)
 delete mode 100644 .eslintrc.js
 create mode 100644 .eslintrc.yaml
 create mode 100644 lib/browser/.eslintrc.yaml
 delete mode 100644 test/.eslintrc.js
 create mode 100644 test/.eslintrc.yaml
 delete mode 100644 test/fixture-expect.js
 create mode 100644 test/setup.js

diff --git a/.eslintignore b/.eslintignore
index 2b550ca81d..3e4b026a81 100644
--- a/.eslintignore
+++ b/.eslintignore
@@ -1,3 +1,2 @@
-lib/to-iso-string/
-test/**/*
-!test/runner.js
+lib/to-iso-string/**/*.js
+mocha.js
diff --git a/.eslintrc.js b/.eslintrc.js
deleted file mode 100644
index 71f9d63aa1..0000000000
--- a/.eslintrc.js
+++ /dev/null
@@ -1,3 +0,0 @@
-module.exports = {
-  "extends": "semistandard"
-};
diff --git a/.eslintrc.yaml b/.eslintrc.yaml
new file mode 100644
index 0000000000..911f22c681
--- /dev/null
+++ b/.eslintrc.yaml
@@ -0,0 +1,11 @@
+env:
+  node: true
+  browser: true
+parserOptions:
+  ecmaVersion: 5
+  sourceType: script
+extends: semistandard
+rules:
+  strict:
+    - error
+    - safe
diff --git a/Makefile b/Makefile
index 25d84f5c1d..611211abde 100644
--- a/Makefile
+++ b/Makefile
@@ -25,7 +25,7 @@ clean:
 
 lint:
 	@printf "==> [Test :: Lint]\n"
-	$(ESLINT) browser-entry.js index.js karma.conf.js bin/mocha bin/_mocha "lib/**/*.js" "scripts/**/*.js" test
+	$(ESLINT) .
 
 test-node: test-bdd test-tdd test-qunit test-exports test-unit test-integration test-jsapi test-compilers test-glob test-requires test-reporters test-only test-global-only
 
diff --git a/bin/_mocha b/bin/_mocha
index 3b2db1729e..6cfc094ba1 100755
--- a/bin/_mocha
+++ b/bin/_mocha
@@ -1,4 +1,5 @@
 #!/usr/bin/env node
+'use strict';
 
 /* eslint no-unused-vars: off */
 
diff --git a/bin/mocha b/bin/mocha
index 1d5c205b06..c6aaa97b00 100755
--- a/bin/mocha
+++ b/bin/mocha
@@ -1,5 +1,7 @@
 #!/usr/bin/env node
 
+'use strict';
+
 /**
  * This tiny wrapper file checks for known node flags and appends them
  * when found, before invoking the "real" _mocha(1) executable.
diff --git a/bin/options.js b/bin/options.js
index 9d1a18a23e..be5a60c9c3 100644
--- a/bin/options.js
+++ b/bin/options.js
@@ -1,3 +1,5 @@
+'use strict';
+
 /**
  * Dependencies.
  */
@@ -14,17 +16,17 @@ module.exports = getOptions;
  * Get options.
  */
 
-function getOptions() {
-  var optsPath = process.argv.indexOf('--opts') !== -1
-        ? process.argv[process.argv.indexOf('--opts') + 1]
-        : 'test/mocha.opts';
+function getOptions () {
+  var optsPath = process.argv.indexOf('--opts') === -1
+    ? 'test/mocha.opts'
+    : process.argv[process.argv.indexOf('--opts') + 1];
 
   try {
     var opts = fs.readFileSync(optsPath, 'utf8')
       .replace(/\\\s/g, '%20')
       .split(/\s/)
       .filter(Boolean)
-      .map(function(value) {
+      .map(function (value) {
         return value.replace(/%20/g, ' ');
       });
 
diff --git a/browser-entry.js b/browser-entry.js
index 5fe416daa8..1d5ef5a1c4 100644
--- a/browser-entry.js
+++ b/browser-entry.js
@@ -1,4 +1,7 @@
+'use strict';
+
 /* eslint no-unused-vars: off */
+/* eslint-env commonjs */
 
 /**
  * Shim process.stdout.
diff --git a/lib/browser/.eslintrc.yaml b/lib/browser/.eslintrc.yaml
new file mode 100644
index 0000000000..d85f537d3b
--- /dev/null
+++ b/lib/browser/.eslintrc.yaml
@@ -0,0 +1,4 @@
+env:
+  node: false
+  browser: false
+  commonjs: true
diff --git a/lib/browser/debug.js b/lib/browser/debug.js
index a4b3b3fdff..3d12160f1a 100644
--- a/lib/browser/debug.js
+++ b/lib/browser/debug.js
@@ -1,4 +1,7 @@
-/* eslint-disable no-unused-vars */
-module.exports = function (type) {
-  return function () {};
+'use strict';
+
+function noop () {}
+
+module.exports = function () {
+  return noop;
 };
diff --git a/lib/browser/events.js b/lib/browser/events.js
index 5e410a342f..e46a9f5f05 100644
--- a/lib/browser/events.js
+++ b/lib/browser/events.js
@@ -1,3 +1,5 @@
+'use strict';
+
 /**
  * Module exports.
  */
diff --git a/lib/browser/progress.js b/lib/browser/progress.js
index e71ba440e3..2b23656b99 100644
--- a/lib/browser/progress.js
+++ b/lib/browser/progress.js
@@ -1,3 +1,5 @@
+'use strict';
+
 /**
  * Expose `Progress`.
  */
diff --git a/lib/browser/tty.js b/lib/browser/tty.js
index 7825e1c91c..c77f7e99a6 100644
--- a/lib/browser/tty.js
+++ b/lib/browser/tty.js
@@ -1,3 +1,5 @@
+'use strict';
+
 exports.isatty = function isatty () {
   return true;
 };
diff --git a/lib/context.js b/lib/context.js
index c049dc5471..019fe8891c 100644
--- a/lib/context.js
+++ b/lib/context.js
@@ -1,3 +1,5 @@
+'use strict';
+
 /**
  * Module dependencies.
  */
diff --git a/lib/hook.js b/lib/hook.js
index 54260198ac..392a4cfb4d 100644
--- a/lib/hook.js
+++ b/lib/hook.js
@@ -1,3 +1,5 @@
+'use strict';
+
 /**
  * Module dependencies.
  */
diff --git a/lib/interfaces/bdd.js b/lib/interfaces/bdd.js
index 289f93797d..33efc169a2 100644
--- a/lib/interfaces/bdd.js
+++ b/lib/interfaces/bdd.js
@@ -1,3 +1,5 @@
+'use strict';
+
 /**
  * Module dependencies.
  */
diff --git a/lib/interfaces/exports.js b/lib/interfaces/exports.js
index 2bfa3fb4ad..debfaee3b8 100644
--- a/lib/interfaces/exports.js
+++ b/lib/interfaces/exports.js
@@ -1,3 +1,5 @@
+'use strict';
+
 /**
  * Module dependencies.
  */
diff --git a/lib/interfaces/index.js b/lib/interfaces/index.js
index 4f825d15b2..0bd810abb7 100644
--- a/lib/interfaces/index.js
+++ b/lib/interfaces/index.js
@@ -1,3 +1,5 @@
+'use strict';
+
 exports.bdd = require('./bdd');
 exports.tdd = require('./tdd');
 exports.qunit = require('./qunit');
diff --git a/lib/interfaces/qunit.js b/lib/interfaces/qunit.js
index 1e567a0af6..44491db926 100644
--- a/lib/interfaces/qunit.js
+++ b/lib/interfaces/qunit.js
@@ -1,3 +1,5 @@
+'use strict';
+
 /**
  * Module dependencies.
  */
diff --git a/lib/interfaces/tdd.js b/lib/interfaces/tdd.js
index b9802f85b7..253e221575 100644
--- a/lib/interfaces/tdd.js
+++ b/lib/interfaces/tdd.js
@@ -1,3 +1,5 @@
+'use strict';
+
 /**
  * Module dependencies.
  */
diff --git a/lib/mocha.js b/lib/mocha.js
index b923227048..dcc1492f5a 100644
--- a/lib/mocha.js
+++ b/lib/mocha.js
@@ -1,3 +1,5 @@
+'use strict';
+
 /*!
  * mocha
  * Copyright(c) 2011 TJ Holowaychuk <tj@vision-media.ca>
diff --git a/lib/ms.js b/lib/ms.js
index fed85f8c14..9590856052 100644
--- a/lib/ms.js
+++ b/lib/ms.js
@@ -1,3 +1,5 @@
+'use strict';
+
 /**
  * Helpers.
  */
diff --git a/lib/pending.js b/lib/pending.js
index 47be376928..c780104610 100644
--- a/lib/pending.js
+++ b/lib/pending.js
@@ -1,3 +1,4 @@
+'use strict';
 
 /**
  * Expose `Pending`.
diff --git a/lib/reporters/base.js b/lib/reporters/base.js
index df201ef69a..205488426a 100644
--- a/lib/reporters/base.js
+++ b/lib/reporters/base.js
@@ -1,3 +1,5 @@
+'use strict';
+
 /**
  * Module dependencies.
  */
diff --git a/lib/reporters/doc.js b/lib/reporters/doc.js
index 506ce6d68d..aad1d92522 100644
--- a/lib/reporters/doc.js
+++ b/lib/reporters/doc.js
@@ -1,3 +1,5 @@
+'use strict';
+
 /**
  * Module dependencies.
  */
diff --git a/lib/reporters/dot.js b/lib/reporters/dot.js
index e2a359ce86..81e106edd0 100644
--- a/lib/reporters/dot.js
+++ b/lib/reporters/dot.js
@@ -1,3 +1,5 @@
+'use strict';
+
 /**
  * Module dependencies.
  */
diff --git a/lib/reporters/html.js b/lib/reporters/html.js
index bf46b5e18b..9b9817c509 100644
--- a/lib/reporters/html.js
+++ b/lib/reporters/html.js
@@ -1,3 +1,5 @@
+'use strict';
+
 /* eslint-env browser */
 
 /**
diff --git a/lib/reporters/index.js b/lib/reporters/index.js
index 221a81d95b..d3b5481e41 100644
--- a/lib/reporters/index.js
+++ b/lib/reporters/index.js
@@ -1,3 +1,5 @@
+'use strict';
+
 // Alias exports to a their normalized format Mocha#reporter to prevent a need
 // for dynamic (try/catch) requires, which Browserify doesn't handle.
 exports.Base = exports.base = require('./base');
diff --git a/lib/reporters/json-stream.js b/lib/reporters/json-stream.js
index a528abf857..6126e47ea1 100644
--- a/lib/reporters/json-stream.js
+++ b/lib/reporters/json-stream.js
@@ -1,3 +1,5 @@
+'use strict';
+
 /**
  * Module dependencies.
  */
diff --git a/lib/reporters/json.js b/lib/reporters/json.js
index 42bcd96d4c..259a782121 100644
--- a/lib/reporters/json.js
+++ b/lib/reporters/json.js
@@ -1,3 +1,5 @@
+'use strict';
+
 /**
  * Module dependencies.
  */
diff --git a/lib/reporters/landing.js b/lib/reporters/landing.js
index c5da809d7a..b8c7b5f20c 100644
--- a/lib/reporters/landing.js
+++ b/lib/reporters/landing.js
@@ -1,3 +1,5 @@
+'use strict';
+
 /**
  * Module dependencies.
  */
diff --git a/lib/reporters/list.js b/lib/reporters/list.js
index e154b069fa..2e54314e91 100644
--- a/lib/reporters/list.js
+++ b/lib/reporters/list.js
@@ -1,3 +1,5 @@
+'use strict';
+
 /**
  * Module dependencies.
  */
diff --git a/lib/reporters/markdown.js b/lib/reporters/markdown.js
index 01c76a7eea..9c06616ea9 100644
--- a/lib/reporters/markdown.js
+++ b/lib/reporters/markdown.js
@@ -1,3 +1,5 @@
+'use strict';
+
 /**
  * Module dependencies.
  */
diff --git a/lib/reporters/min.js b/lib/reporters/min.js
index f0e690ab5a..0d772f9601 100644
--- a/lib/reporters/min.js
+++ b/lib/reporters/min.js
@@ -1,3 +1,5 @@
+'use strict';
+
 /**
  * Module dependencies.
  */
diff --git a/lib/reporters/nyan.js b/lib/reporters/nyan.js
index a8c0b85278..1be49a97b9 100644
--- a/lib/reporters/nyan.js
+++ b/lib/reporters/nyan.js
@@ -1,3 +1,5 @@
+'use strict';
+
 /**
  * Module dependencies.
  */
diff --git a/lib/reporters/progress.js b/lib/reporters/progress.js
index d4c2144b3e..378ce38272 100644
--- a/lib/reporters/progress.js
+++ b/lib/reporters/progress.js
@@ -1,3 +1,5 @@
+'use strict';
+
 /**
  * Module dependencies.
  */
diff --git a/lib/reporters/spec.js b/lib/reporters/spec.js
index ce5894d247..993aff8dd3 100644
--- a/lib/reporters/spec.js
+++ b/lib/reporters/spec.js
@@ -1,3 +1,5 @@
+'use strict';
+
 /**
  * Module dependencies.
  */
diff --git a/lib/reporters/tap.js b/lib/reporters/tap.js
index 13c82c1d36..e37ac1b16f 100644
--- a/lib/reporters/tap.js
+++ b/lib/reporters/tap.js
@@ -1,3 +1,5 @@
+'use strict';
+
 /**
  * Module dependencies.
  */
diff --git a/lib/reporters/xunit.js b/lib/reporters/xunit.js
index fb3b846966..08f7b4cac3 100644
--- a/lib/reporters/xunit.js
+++ b/lib/reporters/xunit.js
@@ -1,3 +1,5 @@
+'use strict';
+
 /**
  * Module dependencies.
  */
diff --git a/lib/runnable.js b/lib/runnable.js
index bee4ef3160..3edd9abd3e 100644
--- a/lib/runnable.js
+++ b/lib/runnable.js
@@ -1,3 +1,5 @@
+'use strict';
+
 /**
  * Module dependencies.
  */
diff --git a/lib/runner.js b/lib/runner.js
index 3b071a4e1a..66ac3b0f6c 100644
--- a/lib/runner.js
+++ b/lib/runner.js
@@ -1,3 +1,5 @@
+'use strict';
+
 /**
  * Module dependencies.
  */
diff --git a/lib/suite.js b/lib/suite.js
index 7f3c505485..13617ab91d 100644
--- a/lib/suite.js
+++ b/lib/suite.js
@@ -1,3 +1,5 @@
+'use strict';
+
 /**
  * Module dependencies.
  */
diff --git a/lib/test.js b/lib/test.js
index b945560aa0..66bb57cb42 100644
--- a/lib/test.js
+++ b/lib/test.js
@@ -1,3 +1,5 @@
+'use strict';
+
 /**
  * Module dependencies.
  */
diff --git a/lib/utils.js b/lib/utils.js
index 2a77f982ae..5e3b07a683 100644
--- a/lib/utils.js
+++ b/lib/utils.js
@@ -1,3 +1,5 @@
+'use strict';
+
 /* eslint-env browser */
 
 /**
diff --git a/package.json b/package.json
index af6ba1003e..8f9f2731bf 100644
--- a/package.json
+++ b/package.json
@@ -314,6 +314,7 @@
     "supports-color": "3.1.2"
   },
   "devDependencies": {
+    "assert": "^1.4.1",
     "browserify": "^13.0.0",
     "coffee-script": "^1.10.0",
     "eslint": "^2.13.1",
diff --git a/test/.eslintrc.js b/test/.eslintrc.js
deleted file mode 100644
index 5654cb80df..0000000000
--- a/test/.eslintrc.js
+++ /dev/null
@@ -1,8 +0,0 @@
-module.exports = {
-  env: {
-    mocha: true
-  },
-  globals: {
-    expect: false
-  }
-};
diff --git a/test/.eslintrc.yaml b/test/.eslintrc.yaml
new file mode 100644
index 0000000000..1830a0b6f4
--- /dev/null
+++ b/test/.eslintrc.yaml
@@ -0,0 +1,7 @@
+env:
+  mocha: true
+globals:
+  expect: false
+  assert: false
+  # https://github.com/sindresorhus/globals/pull/102
+  run: false
diff --git a/test/acceptance/context.spec.js b/test/acceptance/context.spec.js
index 69dea139c9..cbcdedb49d 100644
--- a/test/acceptance/context.spec.js
+++ b/test/acceptance/context.spec.js
@@ -1,72 +1,73 @@
-describe('Context', function(){
-  beforeEach(function(){
+'use strict';
+
+describe('Context', function () {
+  beforeEach(function () {
     this.calls = ['before'];
-  })
+  });
 
-  describe('nested', function(){
-    beforeEach(function(){
+  describe('nested', function () {
+    beforeEach(function () {
       this.calls.push('before two');
-    })
+    });
 
-    it('should work', function(){
+    it('should work', function () {
       expect(this.calls).to.eql(['before', 'before two']);
       this.calls.push('test');
-    })
+    });
 
-    after(function(){
+    after(function () {
       expect(this.calls).to.eql(['before', 'before two', 'test']);
       this.calls.push('after two');
-    })
-  })
+    });
+  });
 
-  after(function(){
+  after(function () {
     expect(this.calls).to.eql(['before', 'before two', 'test', 'after two']);
-  })
-})
+  });
+});
 
-describe('Context Siblings', function(){
-  beforeEach(function(){
+describe('Context Siblings', function () {
+  beforeEach(function () {
     this.calls = ['before'];
-  })
+  });
 
-  describe('sequestered sibling', function(){
-    beforeEach(function(){
+  describe('sequestered sibling', function () {
+    beforeEach(function () {
       this.calls.push('before two');
       this.hiddenFromSibling = 'This should be hidden';
-    })
+    });
 
-    it('should work', function(){
-      expect(this.hiddenFromSibling).to.eql('This should be hidden')
-    })
-  })
+    it('should work', function () {
+      expect(this.hiddenFromSibling).to.eql('This should be hidden');
+    });
+  });
 
-  describe('sibling verifiction', function(){
-    beforeEach(function(){
+  describe('sibling verifiction', function () {
+    beforeEach(function () {
       this.calls.push('before sibling');
-    })
+    });
 
-    it('should not have value set within a sibling describe', function(){
+    it('should not have value set within a sibling describe', function () {
       expect('This should be hidden').not.to.eql(this.hiddenFromSibling);
       this.visibleFromTestSibling = 'Visible from test sibling';
-    })
+    });
 
-    it('should allow test siblings to modify shared context', function(){
+    it('should allow test siblings to modify shared context', function () {
       expect('Visible from test sibling').to.eql(this.visibleFromTestSibling);
-    })
+    });
 
-    it('should have reset this.calls before describe', function(){
+    it('should have reset this.calls before describe', function () {
       expect(this.calls).to.eql(['before', 'before sibling']);
-    })
-  })
+    });
+  });
 
-  after(function(){
+  after(function () {
     expect(this.calls).to.eql(['before', 'before sibling']);
-  })
-
-})
+  });
+});
 
-describe('timeout()', function(){
-  it('should return the timeout', function(){
+describe('timeout()', function () {
+  it('should return the timeout', function () {
     expect(this.timeout()).to.equal(200);
   });
 });
diff --git a/test/acceptance/duration.spec.js b/test/acceptance/duration.spec.js
index 4f319b8a3c..0194d4408c 100644
--- a/test/acceptance/duration.spec.js
+++ b/test/acceptance/duration.spec.js
@@ -1,25 +1,27 @@
-describe('durations', function(){
-  describe('when slow', function(){
-    it('should highlight in red', function(done){
-      setTimeout(function(){
+'use strict';
+
+describe('durations', function () {
+  describe('when slow', function () {
+    it('should highlight in red', function (done) {
+      setTimeout(function () {
         done();
       }, 100);
-    })
-  })
+    });
+  });
 
-  describe('when reasonable', function(){
-    it('should highlight in yellow', function(done){
-      setTimeout(function(){
+  describe('when reasonable', function () {
+    it('should highlight in yellow', function (done) {
+      setTimeout(function () {
         done();
       }, 50);
-    })
-  })
+    });
+  });
 
-  describe('when fast', function(){
-    it('should highlight in green', function(done){
-      setTimeout(function(){
+  describe('when fast', function () {
+    it('should highlight in green', function (done) {
+      setTimeout(function () {
         done();
       }, 10);
-    })
-  })
-})
+    });
+  });
+});
diff --git a/test/acceptance/fs.spec.js b/test/acceptance/fs.spec.js
index 3a70f2752c..9d0357c382 100644
--- a/test/acceptance/fs.spec.js
+++ b/test/acceptance/fs.spec.js
@@ -1,20 +1,22 @@
+'use strict';
+
 var fs = require('fs');
 var path = require('path');
 var os = require('os');
 var tmpFile = path.join.bind(path, os.tmpdir());
 
-describe('fs.readFile()', function(){
-  describe('when the file exists', function(){
-    it('should succeed', function(done){
-      fs.writeFile(tmpFile('mocha'), 'wahoo', done)
-    })
-  })
+describe('fs.readFile()', function () {
+  describe('when the file exists', function () {
+    it('should succeed', function (done) {
+      fs.writeFile(tmpFile('mocha'), 'wahoo', done);
+    });
+  });
 
-  describe('when the file does not exist', function(){
-    it('should fail', function(done){
+  describe('when the file does not exist', function () {
+    it('should fail', function (done) {
       // uncomment
       // fs.readFile(tmpFile('does-not-exist'), done);
       done();
-    })
-  })
-})
+    });
+  });
+});
diff --git a/test/acceptance/glob/glob.spec.js b/test/acceptance/glob/glob.spec.js
index 3029ae82ee..eca3733898 100644
--- a/test/acceptance/glob/glob.spec.js
+++ b/test/acceptance/glob/glob.spec.js
@@ -1,5 +1,7 @@
-describe('globbing test', function(){
-  it('should find this test', function(){
+'use strict';
+
+describe('globbing test', function () {
+  it('should find this test', function () {
     // see glob.sh for details
-  })
+  });
 });
diff --git a/test/acceptance/globals.spec.js b/test/acceptance/globals.spec.js
index f8ef804b23..b87df9fd99 100644
--- a/test/acceptance/globals.spec.js
+++ b/test/acceptance/globals.spec.js
@@ -1,40 +1,42 @@
-describe('global leaks', function(){
-  before(function(){
+'use strict';
+
+describe('global leaks', function () {
+  before(function () {
     // uncomment to test
     // foo = 'hey';
     // bar = 'hey';
-  })
+  });
 
-  beforeEach(function(){
+  beforeEach(function () {
     // uncomment to test
     // foo = 'bar'
   });
 
-  it('should cause tests to fail', function(){
+  it('should cause tests to fail', function () {
     // uncomment to test
     // foo = 'bar';
     // bar = 'baz';
     // baz = 'raz';
   });
 
-  it('should pass when accepted', function(){
+  it('should pass when accepted', function () {
     global.okGlobalA = 1;
     global.okGlobalB = 1;
     global.okGlobalC = 1;
-  })
+  });
 
-  it('should pass with wildcard', function(){
+  it('should pass with wildcard', function () {
     global.callback123 = 'foo';
     global.callback345 = 'bar';
   });
 
-  it('should pass when prefixed "mocha-"', function(){
+  it('should pass when prefixed "mocha-"', function () {
     // Opera and IE do this for HTML element IDs anyway
     // but to sure we can assert this in any browser, simulate it.
     global['mocha-example'] = { nodeType: 1 };
   });
 
-  afterEach(function(){
+  afterEach(function () {
     // uncomment to test
     // foo = 'bar'
   });
diff --git a/test/acceptance/http.spec.js b/test/acceptance/http.spec.js
index 43b8588508..b8bc2f7e26 100644
--- a/test/acceptance/http.spec.js
+++ b/test/acceptance/http.spec.js
@@ -1,16 +1,18 @@
+'use strict';
+
 var http = require('http');
 
-var server = http.createServer(function(req, res){
+var server = http.createServer(function (req, res) {
   res.end('Hello World\n');
-})
+});
 
 server.listen(8888);
 
-describe('http', function(){
-  it('should provide an example', function(done){
-    http.get({ path: '/', port: 8888 }, function(res){
+describe('http', function () {
+  it('should provide an example', function (done) {
+    http.get({ path: '/', port: 8888 }, function (res) {
       expect(res).to.have.property('statusCode', 200);
       done();
-    })
-  })
-})
+    });
+  });
+});
diff --git a/test/acceptance/interfaces/bdd.spec.js b/test/acceptance/interfaces/bdd.spec.js
index ba444c8f7f..f6e24d88a8 100644
--- a/test/acceptance/interfaces/bdd.spec.js
+++ b/test/acceptance/interfaces/bdd.spec.js
@@ -1,32 +1,34 @@
-describe('integer primitives', function(){
-  describe('arithmetic', function(){
-    it('should add', function(){
+'use strict';
+
+describe('integer primitives', function () {
+  describe('arithmetic', function () {
+    it('should add', function () {
       expect(1 + 1).to.equal(2);
       expect(2 + 2).to.equal(4);
-    })
+    });
 
-    it('should subtract', function(){
+    it('should subtract', function () {
       expect(1 - 1).to.equal(0);
       expect(2 - 1).to.equal(1);
-    })
-  })
-})
+    });
+  });
+});
 
-describe('integer primitives', function(){
-  describe('arithmetic is not', function(){
-    it('should add', function(){
+describe('integer primitives', function () {
+  describe('arithmetic is not', function () {
+    it('should add', function () {
       expect(1 + 1).not.to.equal(3);
       expect(2 + 2).not.to.equal(5);
-    })
-  })
-})
+    });
+  });
+});
 
-context('test suite', function(){
-  beforeEach(function(){
+context('test suite', function () {
+  beforeEach(function () {
     this.number = 5;
-  })
+  });
 
-  specify('share a property', function(){
+  specify('share a property', function () {
     expect(this.number).to.equal(5);
-  })
-})
+  });
+});
diff --git a/test/acceptance/interfaces/exports.spec.js b/test/acceptance/interfaces/exports.spec.js
index 08db71200b..f53c6a4ca0 100644
--- a/test/acceptance/interfaces/exports.spec.js
+++ b/test/acceptance/interfaces/exports.spec.js
@@ -1,43 +1,48 @@
+'use strict';
+
 var calls = [];
 
 exports.Array = {
-  before: function(){
+  before: function () {
     calls.push('before');
   },
 
-  after: function(){
+  after: function () {
     calls.push('after');
-    expect(calls).to.eql([
-        'before'
-      , 'before each'
-      , 'one'
-      , 'after each'
-      , 'before each'
-      , 'two'
-      , 'after each'
-      , 'after']);
+    expect(calls)
+      .to
+      .eql([
+        'before',
+        'before each',
+        'one',
+        'after each',
+        'before each',
+        'two',
+        'after each',
+        'after'
+      ]);
   },
 
   '#indexOf()': {
-    beforeEach: function(){
+    beforeEach: function () {
       calls.push('before each');
     },
 
-    afterEach: function(){
+    afterEach: function () {
       calls.push('after each');
     },
 
-    'should return -1 when the value is not present': function(){
+    'should return -1 when the value is not present': function () {
       calls.push('one');
-      expect([1,2,3].indexOf(5)).to.equal(-1);
-      expect([1,2,3].indexOf(0)).to.equal(-1);
+      expect([1, 2, 3].indexOf(5)).to.equal(-1);
+      expect([1, 2, 3].indexOf(0)).to.equal(-1);
     },
 
-    'should return the correct index when the value is present': function(){
+    'should return the correct index when the value is present': function () {
       calls.push('two');
-      expect([1,2,3].indexOf(1)).to.equal(0);
-      expect([1,2,3].indexOf(2)).to.equal(1);
-      expect([1,2,3].indexOf(3)).to.equal(2);
+      expect([1, 2, 3].indexOf(1)).to.equal(0);
+      expect([1, 2, 3].indexOf(2)).to.equal(1);
+      expect([1, 2, 3].indexOf(3)).to.equal(2);
     }
   }
 };
diff --git a/test/acceptance/interfaces/qunit.spec.js b/test/acceptance/interfaces/qunit.spec.js
index d452e769c5..0d15272f0b 100644
--- a/test/acceptance/interfaces/qunit.spec.js
+++ b/test/acceptance/interfaces/qunit.spec.js
@@ -1,23 +1,25 @@
-function ok(expr, msg) {
+'use strict';
+
+function ok (expr, msg) {
   if (!expr) throw new Error(msg);
 }
 
 suite('integer primitives');
 
-test('should add', function(){
+test('should add', function () {
   var number = 2 + 2;
-  ok(number == 4);
+  ok(number === 4);
 });
 
-test('should decrement', function(){
+test('should decrement', function () {
   var number = 3;
-  ok(--number == 2);
-  ok(--number == 1);
-  ok(--number == 0);
+  ok(--number === 2);
+  ok(--number === 1);
+  ok(--number === 0);
 });
 
 suite('String');
 
-test('#length', function(){
-  ok('foo'.length == 3);
+test('#length', function () {
+  ok('foo'.length === 3);
 });
diff --git a/test/acceptance/interfaces/tdd.spec.js b/test/acceptance/interfaces/tdd.spec.js
index 7ad079e36d..c2db518d70 100644
--- a/test/acceptance/interfaces/tdd.spec.js
+++ b/test/acceptance/interfaces/tdd.spec.js
@@ -1,38 +1,40 @@
-suite('integer primitives', function(){
-  suite('arithmetic', function(){
+'use strict';
+
+suite('integer primitives', function () {
+  suite('arithmetic', function () {
     var initialValue = 41;
 
-    suiteSetup(function(done){
+    suiteSetup(function (done) {
       expect(initialValue).to.eql(41);
       initialValue += 1;
       done();
     });
 
-    test('should add', function(){
+    test('should add', function () {
       expect(initialValue).to.eql(42);
       expect(1 + 1).to.equal(2);
       expect(2 + 2).to.equal(4);
     });
 
-    test('should subtract', function(){
+    test('should subtract', function () {
       expect(initialValue).to.eql(42);
       expect(1 - 1).to.equal(0);
       expect(2 - 1).to.equal(1);
     });
 
-    test.skip('should skip this test', function(){
+    test.skip('should skip this test', function () {
       var zero = 0;
       expect(zero).to.equal(1, 'this test should have been skipped');
     });
 
-    suite.skip('should skip this suite', function(){
-      test('should skip this test', function(){
+    suite.skip('should skip this suite', function () {
+      test('should skip this test', function () {
         var zero = 0;
         expect(zero).to.equal(1, 'this test should have been skipped');
       });
     });
 
-    suiteTeardown(function(done){
+    suiteTeardown(function (done) {
       expect(initialValue).to.eql(42);
       done();
     });
diff --git a/test/acceptance/lookup-files.spec.js b/test/acceptance/lookup-files.spec.js
index 5d4a48d8af..faf31b1375 100644
--- a/test/acceptance/lookup-files.spec.js
+++ b/test/acceptance/lookup-files.spec.js
@@ -7,13 +7,13 @@ var os = require('os');
 var mkdirp = require('mkdirp');
 var rimraf = require('rimraf');
 
-describe('lookupFiles', function() {
+describe('lookupFiles', function () {
   var tmpDir = path.join(os.tmpDir(), 'mocha-lookup-files');
   var existsSync = fs.existsSync;
   var tmpFile = path.join.bind(path, tmpDir);
   var symlinkSupported = false;
 
-  (function testSymlinkSupport() {
+  (function testSymlinkSupport () {
     makeTempDir();
 
     fs.writeFileSync(tmpFile('mocha-utils.js'), 'yippy skippy ying yang yow');
@@ -27,7 +27,7 @@ describe('lookupFiles', function() {
     }
   }());
 
-  beforeEach(function() {
+  beforeEach(function () {
     makeTempDir();
 
     fs.writeFileSync(tmpFile('mocha-utils.js'), 'yippy skippy ying yang yow');
@@ -36,7 +36,7 @@ describe('lookupFiles', function() {
     }
   });
 
-  (symlinkSupported ? it : it.skip)('should not choke on symlinks', function() {
+  (symlinkSupported ? it : it.skip)('should not choke on symlinks', function () {
     expect(utils.lookupFiles(tmpDir, ['js'], false))
       .to
       .contain(tmpFile('mocha-utils-link.js'))
@@ -57,7 +57,7 @@ describe('lookupFiles', function() {
       .eql([]);
   });
 
-  it('should accept a glob "path" value', function() {
+  it('should accept a glob "path" value', function () {
     var res = utils.lookupFiles(tmpFile('mocha-utils*'), ['js'], false)
       .map(path.normalize.bind(path));
 
@@ -80,11 +80,11 @@ describe('lookupFiles', function() {
 
   afterEach(removeTempDir);
 
-  function makeTempDir() {
+  function makeTempDir () {
     mkdirp.sync(tmpDir);
   }
 
-  function removeTempDir() {
+  function removeTempDir () {
     rimraf.sync(tmpDir);
   }
 });
diff --git a/test/acceptance/misc/exit.spec.js b/test/acceptance/misc/exit.spec.js
index 113e392300..916752f9b1 100644
--- a/test/acceptance/misc/exit.spec.js
+++ b/test/acceptance/misc/exit.spec.js
@@ -1,18 +1,20 @@
-describe('exit', function(){
-  //note --bail works nicely in that it still allows an 'early exit' in an error scenario
-  it('should not exit even in error scenario if called with --no-exit', function(done){
+'use strict';
+
+describe('exit', function () {
+  // note --bail works nicely in that it still allows an 'early exit' in an error scenario
+  it('should not exit even in error scenario if called with --no-exit', function (done) {
     done(new Error('failure'));
-  })
+  });
 
-  it('should take a long time to exit if called with --no-exit', function(done){
+  it('should take a long time to exit if called with --no-exit', function (done) {
     done();
-    setTimeout(function() {
+    setTimeout(function () {
       console.log('all done');
-    }, 2500)
-  })
+    }, 2500);
+  });
 
   it('should kill all processes when SIGINT received', function () {
     // uncomment to test
-    //while (true) {}
+    // while (true) {}
   });
-})
+});
diff --git a/test/acceptance/misc/many.spec.js b/test/acceptance/misc/many.spec.js
index 26538bc66e..d4e4a1e806 100644
--- a/test/acceptance/misc/many.spec.js
+++ b/test/acceptance/misc/many.spec.js
@@ -1,27 +1,28 @@
+'use strict';
+
 // Useful for testing SIGINT handler
 // use env.big_number to tune iterations so that you have time to ctrl+c
 
-describe('a load of tests', function(){
-  it('should fail the first test', function(){
+describe('a load of tests', function () {
+  it('should fail the first test', function () {
     throw new Error('this should appear in the summary');
-  })
+  });
 
   var iterations = (process.env.big_number || 1e7);
-  function work() {
+  function work () {
     var a = 0;
-    for(var i=0; i<iterations; ++i) {
+    for (var i = 0; i < iterations; ++i) {
       a += i;
     }
   }
 
-  function addTest() {
-    it('should pass test ' + i, function(){
+  function addTest () {
+    it('should pass test ' + i, function () {
       work();
-    })
+    });
   }
 
-  for(var i=0; i<500; ++i) {
+  for (var i = 0; i < 500; ++i) {
     addTest();
   }
-
-})
+});
diff --git a/test/acceptance/misc/nontty.spec.js b/test/acceptance/misc/nontty.spec.js
index 2372a660b9..ea57b9733f 100644
--- a/test/acceptance/misc/nontty.spec.js
+++ b/test/acceptance/misc/nontty.spec.js
@@ -1,9 +1,11 @@
-describe('tests for non-tty', function(){
-  it('should pass', function(){
+'use strict';
 
-  })
+describe('tests for non-tty', function () {
+  it('should pass', function () {
 
-  it('should fail', function(){
-    throw new Error('oh noes')
-  })
-})
+  });
+
+  it('should fail', function () {
+    throw new Error('oh noes');
+  });
+});
diff --git a/test/acceptance/misc/only/bdd-require.spec.js b/test/acceptance/misc/only/bdd-require.spec.js
index 516dad7afa..14710c4cd2 100644
--- a/test/acceptance/misc/only/bdd-require.spec.js
+++ b/test/acceptance/misc/only/bdd-require.spec.js
@@ -1,4 +1,6 @@
-/*jshint node: true */
+'use strict';
+
+/* jshint node: true */
 
 var mocha = require('../../../../lib/mocha');
 
@@ -6,12 +8,12 @@ var beforeEach = mocha.beforeEach;
 var it = mocha.it;
 var describe = mocha.describe;
 
-describe('it.only via require("mocha")', function() {
-  beforeEach(function() {
+describe('it.only via require("mocha")', function () {
+  beforeEach(function () {
     this.didRunBeforeEach = true;
   });
-  describe("nested within a describe/context", function() {
-    it.only('should run all enclosing beforeEach hooks', function() {
+  describe('nested within a describe/context', function () {
+    it.only('should run all enclosing beforeEach hooks', function () {
       require('assert').equal(this.didRunBeforeEach, true);
     });
   });
diff --git a/test/acceptance/misc/only/bdd.spec.js b/test/acceptance/misc/only/bdd.spec.js
index 7a33a74eac..639ab30e1b 100644
--- a/test/acceptance/misc/only/bdd.spec.js
+++ b/test/acceptance/misc/only/bdd.spec.js
@@ -1,75 +1,77 @@
-describe('should only run .only test in this bdd suite', function() {
-  it('should not run this test', function() {
+'use strict';
+
+describe('should only run .only test in this bdd suite', function () {
+  it('should not run this test', function () {
     (0).should.equal(1, 'this test should have been skipped');
   });
-  it.only('should run this test', function() {
+  it.only('should run this test', function () {
     (0).should.equal(0, 'this .only test should run');
   });
-  it('should run this test, not (includes the title of the .only test)', function() {
+  it('should run this test, not (includes the title of the .only test)', function () {
     (0).should.equal(1, 'this test should have been skipped');
   });
 });
 
-describe('should not run this suite', function() {
-  it('should not run this test', function() {
+describe('should not run this suite', function () {
+  it('should not run this test', function () {
     (true).should.equal(false);
   });
 
-  it('should not run this test', function() {
+  it('should not run this test', function () {
     (true).should.equal(false);
   });
 
-  it('should not run this test', function() {
+  it('should not run this test', function () {
     (true).should.equal(false);
   });
 });
 
-describe.only('should run all tests in this bdd suite', function() {
-  it('should run this test #1', function() {
+describe.only('should run all tests in this bdd suite', function () {
+  it('should run this test #1', function () {
     (true).should.equal(true);
   });
 
-  it('should run this test #2', function() {
+  it('should run this test #2', function () {
     (1).should.equal(1);
   });
 
-  it('should run this test #3', function() {
+  it('should run this test #3', function () {
     ('foo').should.equal('foo');
   });
 });
 
-describe('should run only suites that marked as `only`', function() {
-  describe.only('should run all this tdd suite', function() {
-    it('should run this test #1', function() {
+describe('should run only suites that marked as `only`', function () {
+  describe.only('should run all this tdd suite', function () {
+    it('should run this test #1', function () {
       (true).should.equal(true);
     });
 
-    it('should run this test #2', function() {
+    it('should run this test #2', function () {
       (true).should.equal(true);
     });
   });
 
-  describe('should not run this suite', function() {
-    it('should run this test', function() {
+  describe('should not run this suite', function () {
+    it('should run this test', function () {
       (true).should.equal(false);
     });
   });
 });
 
 // Nested situation
-describe('should not run parent tests', function() {
-  it('should not run this test', function() {
+describe('should not run parent tests', function () {
+  it('should not run this test', function () {
     (true).should.equal(false);
   });
-  describe('and not the child tests too', function() {
-    it('should not run this test', function() {
+  describe('and not the child tests too', function () {
+    it('should not run this test', function () {
       (true).should.equal(false);
     });
-    describe.only('but run all the tests in this suite', function() {
-      it('should run this test #1', function() {
+    describe.only('but run all the tests in this suite', function () {
+      it('should run this test #1', function () {
         (true).should.equal(true);
       });
-      it('should run this test #2', function() {
+      it('should run this test #2', function () {
         (true).should.equal(true);
       });
     });
@@ -77,49 +79,49 @@ describe('should not run parent tests', function() {
 });
 
 // mark test as `only` override the suite behavior
-describe.only('should run only tests that marked as `only`', function() {
-  it('should not run this test #1', function() {
+describe.only('should run only tests that marked as `only`', function () {
+  it('should not run this test #1', function () {
     (false).should.equal(true);
   });
 
-  it.only('should run this test #2', function() {
+  it.only('should run this test #2', function () {
     (true).should.equal(true);
   });
 
-  it('should not run this test #3', function() {
+  it('should not run this test #3', function () {
     (false).should.equal(true);
   });
 
-  it.only('should run this test #4', function() {
+  it.only('should run this test #4', function () {
     (true).should.equal(true);
   });
 });
 
-describe.only('Should run only test cases that mark as only', function() {
-  it.only('should runt his test', function() {
+describe.only('Should run only test cases that mark as only', function () {
+  it.only('should runt his test', function () {
     (true).should.equal(true);
   });
 
-  it('should not run this test', function() {
+  it('should not run this test', function () {
     (false).should.equal(true);
   });
 
-  describe('should not run this suite', function() {
-    it('should not run this test', function() {
+  describe('should not run this suite', function () {
+    it('should not run this test', function () {
       (false).should.equal(true);
     });
   });
 });
 
 // Root Suite
-it.only('#Root-Suite, should run this test-case #1', function() {
+it.only('#Root-Suite, should run this test-case #1', function () {
   (true).should.equal(true);
 });
 
-it.only('#Root-Suite, should run this test-case #2', function() {
+it.only('#Root-Suite, should run this test-case #2', function () {
   (true).should.equal(true);
 });
 
-it('#Root-Suite, should not run this test', function() {
+it('#Root-Suite, should not run this test', function () {
   (false).should.equal(true);
 });
diff --git a/test/acceptance/misc/only/global/bdd.spec.js b/test/acceptance/misc/only/global/bdd.spec.js
index e923876f84..1fc3d14384 100644
--- a/test/acceptance/misc/only/global/bdd.spec.js
+++ b/test/acceptance/misc/only/global/bdd.spec.js
@@ -1,12 +1,14 @@
+'use strict';
+
 // Root-only test cases
-it.only('#Root-Suite, should run this bdd test-case #1', function() {
+it.only('#Root-Suite, should run this bdd test-case #1', function () {
   (true).should.equal(true);
 });
 
-it('#Root-Suite, should not run this bdd test-case #2', function() {
+it('#Root-Suite, should not run this bdd test-case #2', function () {
   (false).should.equal(true);
 });
 
-it('#Root-Suite, should not run this bdd test-case #3', function() {
+it('#Root-Suite, should not run this bdd test-case #3', function () {
   (false).should.equal(true);
-});
\ No newline at end of file
+});
diff --git a/test/acceptance/misc/only/global/qunit.spec.js b/test/acceptance/misc/only/global/qunit.spec.js
index 59ad72c3bf..69bbd3467a 100644
--- a/test/acceptance/misc/only/global/qunit.spec.js
+++ b/test/acceptance/misc/only/global/qunit.spec.js
@@ -1,12 +1,14 @@
+'use strict';
+
 // Root-only test cases
-test.only('#Root-Suite, should run this qunit test-case #1', function() {
+test.only('#Root-Suite, should run this qunit test-case #1', function () {
   (true).should.equal(true);
 });
 
-test('#Root-Suite, should not run this qunit test-case #2', function() {
+test('#Root-Suite, should not run this qunit test-case #2', function () {
   (false).should.equal(true);
 });
 
-test('#Root-Suite, should not run this qunit test-case #3', function() {
+test('#Root-Suite, should not run this qunit test-case #3', function () {
   (false).should.equal(true);
-});
\ No newline at end of file
+});
diff --git a/test/acceptance/misc/only/global/tdd.spec.js b/test/acceptance/misc/only/global/tdd.spec.js
index 08d456848b..03fdea768f 100644
--- a/test/acceptance/misc/only/global/tdd.spec.js
+++ b/test/acceptance/misc/only/global/tdd.spec.js
@@ -1,12 +1,14 @@
+'use strict';
+
 // Root-only test cases
-test.only('#Root-Suite, should run this tdd test-case #1', function() {
+test.only('#Root-Suite, should run this tdd test-case #1', function () {
   (true).should.equal(true);
 });
 
-test('#Root-Suite, should not run this tdd test-case #2', function() {
+test('#Root-Suite, should not run this tdd test-case #2', function () {
   (false).should.equal(true);
 });
 
-test('#Root-Suite, should not run this tdd test-case #3', function() {
+test('#Root-Suite, should not run this tdd test-case #3', function () {
   (false).should.equal(true);
-});
\ No newline at end of file
+});
diff --git a/test/acceptance/misc/only/qunit.spec.js b/test/acceptance/misc/only/qunit.spec.js
index 1248adeba7..77bdfcc64f 100644
--- a/test/acceptance/misc/only/qunit.spec.js
+++ b/test/acceptance/misc/only/qunit.spec.js
@@ -1,73 +1,75 @@
+'use strict';
+
 // Root Suite
-test.only('#Root-Suite, should run this test-case #1', function() {
+test.only('#Root-Suite, should run this test-case #1', function () {
   (true).should.equal(true);
 });
 
-test.only('#Root-Suite, should run this test-case #2', function() {
+test.only('#Root-Suite, should run this test-case #2', function () {
   (true).should.equal(true);
 });
 
-test('#Root-Suite, should not run this test', function() {
+test('#Root-Suite, should not run this test', function () {
   (false).should.equal(true);
 });
 
 suite('should only run .only test in this qunit suite');
 
-test('should not run this test', function() {
+test('should not run this test', function () {
   (0).should.equal(1, 'this test should have been skipped');
 });
-test.only('should run this test', function() {
+test.only('should run this test', function () {
   (0).should.equal(0, 'this .only test should run');
 });
-test('should run this test, not (includes the title of the .only test)', function() {
+test('should run this test, not (includes the title of the .only test)', function () {
   (0).should.equal(1, 'this test should have been skipped');
 });
 
 // Mark suite
 suite.only('should run all tests in this suite');
 
-test('should run this test #1', function() {
+test('should run this test #1', function () {
   (true).should.equal(true);
 });
 
-test('should run this test #2', function() {
+test('should run this test #2', function () {
   (true).should.equal(true);
 });
 
-test('should run this test #3', function() {
+test('should run this test #3', function () {
   (true).should.equal(true);
 });
 
 // Unmark this suite
 suite('should not run any of this suite\'s tests');
 
-test('should not run this test', function() {
+test('should not run this test', function () {
   (false).should.equal(true);
 });
 
-test('should not run this test', function() {
+test('should not run this test', function () {
   (false).should.equal(true);
 });
 
-test('should not run this test', function() {
+test('should not run this test', function () {
   (false).should.equal(true);
 });
 
 // Mark test as `only` override the suite behavior
 suite.only('should run only tests that marked as `only`');
 
-test('should not run this test #1', function() {
+test('should not run this test #1', function () {
   (false).should.equal(true);
 });
 
-test.only('should not run this test #2', function() {
+test.only('should not run this test #2', function () {
   (true).should.equal(true);
 });
 
-test('should not run this test #3', function() {
+test('should not run this test #3', function () {
   (false).should.equal(true);
 });
 
-test.only('should not run this test #4', function() {
+test.only('should not run this test #4', function () {
   (true).should.equal(true);
-});
\ No newline at end of file
+});
diff --git a/test/acceptance/misc/only/tdd.spec.js b/test/acceptance/misc/only/tdd.spec.js
index 7e37e7a3b3..da5f45b198 100644
--- a/test/acceptance/misc/only/tdd.spec.js
+++ b/test/acceptance/misc/only/tdd.spec.js
@@ -1,75 +1,77 @@
-suite('should only run .only test in this tdd suite', function() {
-  test('should not run this test', function() {
+'use strict';
+
+suite('should only run .only test in this tdd suite', function () {
+  test('should not run this test', function () {
     (0).should.equal(1, 'this test should have been skipped');
   });
-  test.only('should run this test', function() {
+  test.only('should run this test', function () {
     (0).should.equal(0, 'this .only test should run');
   });
-  test('should run this test, not (includes the title of the .only test)', function() {
+  test('should run this test, not (includes the title of the .only test)', function () {
     (0).should.equal(1, 'this test should have been skipped');
   });
 });
 
-suite('should not run this suite', function() {
-  test('should not run this test', function() {
+suite('should not run this suite', function () {
+  test('should not run this test', function () {
     (true).should.equal(false);
   });
 
-  test('should not run this test', function() {
+  test('should not run this test', function () {
     (true).should.equal(false);
   });
 
-  test('should not run this test', function() {
+  test('should not run this test', function () {
     (true).should.equal(false);
   });
 });
 
-suite.only('should run all tests in this tdd suite', function() {
-  test('should run this test #1', function() {
+suite.only('should run all tests in this tdd suite', function () {
+  test('should run this test #1', function () {
     (true).should.equal(true);
   });
 
-  test('should run this test #2', function() {
+  test('should run this test #2', function () {
     (1).should.equal(1);
   });
 
-  test('should run this test #3', function() {
+  test('should run this test #3', function () {
     ('foo').should.equal('foo');
   });
 });
 
-suite('should run only suites that marked as `only`', function() {
-  suite.only('should run all this tdd suite', function() {
-    test('should run this test #1', function() {
+suite('should run only suites that marked as `only`', function () {
+  suite.only('should run all this tdd suite', function () {
+    test('should run this test #1', function () {
       (true).should.equal(true);
     });
 
-    test('should run this test #2', function() {
+    test('should run this test #2', function () {
       (true).should.equal(true);
     });
   });
 
-  suite('should not run this suite', function() {
-    test('should not run this test', function() {
+  suite('should not run this suite', function () {
+    test('should not run this test', function () {
       (true).should.equal(false);
     });
   });
 });
 
 // Nested situation
-suite('should not run parent tests', function() {
-  test('should not run this test', function() {
+suite('should not run parent tests', function () {
+  test('should not run this test', function () {
     (true).should.equal(false);
   });
-  suite('and not the child tests too', function() {
-    test('should not run this test', function() {
+  suite('and not the child tests too', function () {
+    test('should not run this test', function () {
       (true).should.equal(false);
     });
-    suite.only('but run all the tests in this suite', function() {
-      test('should run this test #1', function() {
+    suite.only('but run all the tests in this suite', function () {
+      test('should run this test #1', function () {
         (true).should.equal(true);
       });
-      test('should run this test #2', function() {
+      test('should run this test #2', function () {
         (true).should.equal(true);
       });
     });
@@ -77,49 +79,49 @@ suite('should not run parent tests', function() {
 });
 
 // mark test as `only` override the suite behavior
-suite.only('should run only tests that marked as `only`', function() {
-  test('should not run this test #1', function() {
+suite.only('should run only tests that marked as `only`', function () {
+  test('should not run this test #1', function () {
     (false).should.equal(true);
   });
 
-  test.only('should run this test #2', function() {
+  test.only('should run this test #2', function () {
     (true).should.equal(true);
   });
 
-  test('should not run this test #3', function() {
+  test('should not run this test #3', function () {
     (false).should.equal(true);
   });
 
-  test.only('should run this test #4', function() {
+  test.only('should run this test #4', function () {
     (true).should.equal(true);
   });
 });
 
-suite.only('Should run only test cases that mark as only', function() {
-  test.only('should runt his test', function() {
+suite.only('Should run only test cases that mark as only', function () {
+  test.only('should runt his test', function () {
     (true).should.equal(true);
   });
 
-  test('should not run this test', function() {
+  test('should not run this test', function () {
     (false).should.equal(true);
   });
 
-  suite('should not run this suite', function() {
-    test('should not run this test', function() {
+  suite('should not run this suite', function () {
+    test('should not run this test', function () {
       (false).should.equal(true);
     });
   });
 });
 
 // Root Suite
-test.only('#Root-Suite, should run this test-case #1', function() {
+test.only('#Root-Suite, should run this test-case #1', function () {
   (true).should.equal(true);
 });
 
-test.only('#Root-Suite, should run this test-case #2', function() {
+test.only('#Root-Suite, should run this test-case #2', function () {
   (true).should.equal(true);
 });
 
-test('#Root-Suite, should not run this test', function() {
+test('#Root-Suite, should not run this test', function () {
   (false).should.equal(true);
 });
diff --git a/test/acceptance/overspecified-async.spec.js b/test/acceptance/overspecified-async.spec.js
index 2844920379..0f9b6c9ff5 100644
--- a/test/acceptance/overspecified-async.spec.js
+++ b/test/acceptance/overspecified-async.spec.js
@@ -1,5 +1,7 @@
-describe('overspecified asynchronous resolution method', function() {
-  it('should fail when multiple methods are used', function(done) {
+'use strict';
+
+describe('overspecified asynchronous resolution method', function () {
+  it('should fail when multiple methods are used', function (done) {
     setTimeout(done, 0);
 
     // uncomment
diff --git a/test/acceptance/require/a.js b/test/acceptance/require/a.js
index 592d827449..949b8af2f0 100644
--- a/test/acceptance/require/a.js
+++ b/test/acceptance/require/a.js
@@ -1,2 +1,4 @@
-global.required = (global.required || [])
-global.required.push('a.js')
+'use strict';
+
+global.required = (global.required || []);
+global.required.push('a.js');
diff --git a/test/acceptance/require/c.js b/test/acceptance/require/c.js
index 4e681373a1..4d68dc4549 100644
--- a/test/acceptance/require/c.js
+++ b/test/acceptance/require/c.js
@@ -1,2 +1,4 @@
-global.required = (global.required || [])
-global.required.push('c.js')
+'use strict';
+
+global.required = (global.required || []);
+global.required.push('c.js');
diff --git a/test/acceptance/require/require.spec.js b/test/acceptance/require/require.spec.js
index 22570e62ff..f959a859a8 100644
--- a/test/acceptance/require/require.spec.js
+++ b/test/acceptance/require/require.spec.js
@@ -1,9 +1,11 @@
-describe('require test', function(){
-  it('should require args in order', function(){
+'use strict';
+
+describe('require test', function () {
+  it('should require args in order', function () {
     var req = global.required;
     expect(req.indexOf('a.js')).to.equal(0);
     expect(req.indexOf('b.coffee')).to.equal(1);
     expect(req.indexOf('c.js')).to.equal(2);
     expect(req.indexOf('d.coffee')).to.equal(3);
-  })
+  });
 });
diff --git a/test/acceptance/required-tokens.spec.js b/test/acceptance/required-tokens.spec.js
index 6944cee40c..2b44dee59b 100644
--- a/test/acceptance/required-tokens.spec.js
+++ b/test/acceptance/required-tokens.spec.js
@@ -1,3 +1,5 @@
+'use strict';
+
 var assert = require('assert');
 var describe = require('../..').describe;
 var it = require('../..').it;
@@ -6,5 +8,5 @@ describe('using imported describe', function () {
   it('using imported it', function (done) {
     assert.ok(true);
     done();
-  })
-})
+  });
+});
diff --git a/test/acceptance/root.spec.js b/test/acceptance/root.spec.js
index 037e6a328a..abd8d4192e 100644
--- a/test/acceptance/root.spec.js
+++ b/test/acceptance/root.spec.js
@@ -1,11 +1,13 @@
+'use strict';
+
 var calls = [];
 
-before(function(){
+before(function () {
   calls.push('before');
-})
+});
 
-describe('root', function(){
-  it('should be a valid suite', function(){
+describe('root', function () {
+  it('should be a valid suite', function () {
     expect(calls).to.eql(['before']);
-  })
-})
+  });
+});
diff --git a/test/acceptance/throw.spec.js b/test/acceptance/throw.spec.js
index 46cfbad6ad..68e8cd2c1d 100644
--- a/test/acceptance/throw.spec.js
+++ b/test/acceptance/throw.spec.js
@@ -1,3 +1,7 @@
+'use strict';
+
+/* eslint no-throw-literal: off */
+
 var Suite = require('../../lib/suite');
 var Test = require('../../lib/test');
 var Runner = require('../../lib/runner');
@@ -5,34 +9,33 @@ var Runner = require('../../lib/runner');
 describe('a test that throws', function () {
   var suite, runner;
 
-  beforeEach(function(){
+  beforeEach(function () {
     suite = new Suite('Suite', 'root');
     runner = new Runner(suite);
-  })
-  
-  describe('undefined', function (){
-    it('should not pass if throwing sync and test is sync', function(done) {
-      var test = new Test('im sync and throw undefined sync', function(){
+  });
+
+  describe('undefined', function () {
+    it('should not pass if throwing sync and test is sync', function (done) {
+      var test = new Test('im sync and throw undefined sync', function () {
         throw undefined;
       });
       suite.addTest(test);
       runner = new Runner(suite);
-      runner.on('end', function(){
+      runner.on('end', function () {
         expect(runner.failures).to.equal(1);
         expect(test.state).to.equal('failed');
         done();
       });
       runner.run();
-    })
+    });
 
-    it('should not pass if throwing sync and test is async', function(done){
-      var test = new Test('im async and throw undefined sync', function(done2){
+    it('should not pass if throwing sync and test is async', function (done) {
+      var test = new Test('im async and throw undefined sync', function (done2) {
         throw undefined;
-        process.nexTick(done2);
       });
       suite.addTest(test);
       runner = new Runner(suite);
-      runner.on('end', function(){
+      runner.on('end', function () {
         expect(runner.failures).to.equal(1);
         expect(test.state).to.equal('failed');
         done();
@@ -40,47 +43,45 @@ describe('a test that throws', function () {
       runner.run();
     });
 
-    it('should not pass if throwing async and test is async', function(done){
-      var test = new Test('im async and throw undefined async', function(done2){
-        process.nexTick(function(){
+    it('should not pass if throwing async and test is async', function (done) {
+      var test = new Test('im async and throw undefined async', function (done2) {
+        process.nexTick(function () {
           throw undefined;
-          done2();
         });
       });
       suite.addTest(test);
       runner = new Runner(suite);
-      runner.on('end', function(){
+      runner.on('end', function () {
         expect(runner.failures).to.equal(1);
         expect(test.state).to.equal('failed');
         done();
       });
       runner.run();
-    })
-  })
+    });
+  });
 
-  describe('null', function (){
-    it('should not pass if throwing sync and test is sync', function(done) {
-      var test = new Test('im sync and throw null sync', function(){
+  describe('null', function () {
+    it('should not pass if throwing sync and test is sync', function (done) {
+      var test = new Test('im sync and throw null sync', function () {
         throw null;
       });
       suite.addTest(test);
       runner = new Runner(suite);
-      runner.on('end', function(){
+      runner.on('end', function () {
         expect(runner.failures).to.equal(1);
         expect(test.state).to.equal('failed');
         done();
       });
       runner.run();
-    })
+    });
 
-    it('should not pass if throwing sync and test is async', function(done){
-      var test = new Test('im async and throw null sync', function(done2){
+    it('should not pass if throwing sync and test is async', function (done) {
+      var test = new Test('im async and throw null sync', function (done2) {
         throw null;
-        process.nexTick(done2);
       });
       suite.addTest(test);
       runner = new Runner(suite);
-      runner.on('end', function(){
+      runner.on('end', function () {
         expect(runner.failures).to.equal(1);
         expect(test.state).to.equal('failed');
         done();
@@ -88,21 +89,20 @@ describe('a test that throws', function () {
       runner.run();
     });
 
-    it('should not pass if throwing async and test is async', function(done){
-      var test = new Test('im async and throw null async', function(done2){
-        process.nexTick(function(){
+    it('should not pass if throwing async and test is async', function (done) {
+      var test = new Test('im async and throw null async', function (done2) {
+        process.nexTick(function () {
           throw null;
-          done2();
         });
       });
       suite.addTest(test);
       runner = new Runner(suite);
-      runner.on('end', function(){
+      runner.on('end', function () {
         expect(runner.failures).to.equal(1);
         expect(test.state).to.equal('failed');
         done();
       });
       runner.run();
-    })
-  })
-})
+    });
+  });
+});
diff --git a/test/acceptance/timeout.spec.js b/test/acceptance/timeout.spec.js
index f61c3ba566..b3fc632a0d 100644
--- a/test/acceptance/timeout.spec.js
+++ b/test/acceptance/timeout.spec.js
@@ -1,79 +1,79 @@
-describe('timeouts', function(){
-  beforeEach(function(done){
+'use strict';
+
+describe('timeouts', function () {
+  beforeEach(function (done) {
     // uncomment
     // setTimeout(done, 3000);
     done();
-  })
+  });
 
-  it('should error on timeout', function(done){
+  it('should error on timeout', function (done) {
     // uncomment
     // setTimeout(done, 3000);
     done();
-  })
+  });
 
-  it('should allow overriding per-test', function(done){
+  it('should allow overriding per-test', function (done) {
     this.timeout(1000);
-    setTimeout(function(){
+    setTimeout(function () {
       done();
     }, 300);
-  })
+  });
 
-  describe('disabling', function(){
-    it('should allow overriding per-test', function(done){
+  describe('disabling', function () {
+    it('should allow overriding per-test', function (done) {
       this.enableTimeouts(false);
       this.timeout(1);
       setTimeout(done, 2);
     });
 
-    it('should work with timeout(0)', function(done) {
+    it('should work with timeout(0)', function (done) {
       this.timeout(0);
       setTimeout(done, 1);
-    })
+    });
 
-    describe('using beforeEach', function() {
+    describe('using beforeEach', function () {
       beforeEach(function () {
         this.timeout(0);
-      })
+      });
 
-      it('should work with timeout(0)', function(done) {
+      it('should work with timeout(0)', function (done) {
         setTimeout(done, 1);
-      })
-    })
+      });
+    });
 
-    describe('using before', function() {
+    describe('using before', function () {
       before(function () {
         this.timeout(0);
-      })
+      });
 
-      it('should work with timeout(0)', function(done) {
+      it('should work with timeout(0)', function (done) {
         setTimeout(done, 1);
-      })
-    })
+      });
+    });
 
-    describe('using enableTimeouts(false)', function() {
+    describe('using enableTimeouts(false)', function () {
       this.timeout(4);
 
-      it('should suppress timeout(4)', function(done) {
+      it('should suppress timeout(4)', function (done) {
         // The test is in the before() call.
         this.enableTimeouts(false);
         setTimeout(done, 50);
-      })
-    })
+      });
+    });
 
-    describe('suite-level', function() {
+    describe('suite-level', function () {
       this.timeout(0);
 
-      it('should work with timeout(0)', function(done) {
+      it('should work with timeout(0)', function (done) {
         setTimeout(done, 1);
-      })
+      });
 
       describe('nested suite', function () {
-        it('should work with timeout(0)', function(done) {
+        it('should work with timeout(0)', function (done) {
           setTimeout(done, 1);
-        })
-
-      })
-    })
+        });
+      });
+    });
   });
-
-})
+});
diff --git a/test/acceptance/utils.spec.js b/test/acceptance/utils.spec.js
index cab0f42b01..545bdfd265 100644
--- a/test/acceptance/utils.spec.js
+++ b/test/acceptance/utils.spec.js
@@ -1,100 +1,103 @@
+'use strict';
+
 var utils = require('../../lib/utils');
 var toISOString = require('../../lib/to-iso-string');
 var JSON = require('json3');
 
 describe('lib/utils', function () {
   describe('clean', function () {
-    it("should format a single line test function", function () {
+    it('should format a single line test function', function () {
       var fn = [
-        "function () {"
-        , "  var a = 1;"
-        , "}"
-      ].join("\n");
-      expect(utils.clean(fn)).to.equal("var a = 1;");
+        'function () {',
+        '  var a = 1;',
+        '}'
+      ].join('\n');
+      expect(utils.clean(fn)).to.equal('var a = 1;');
     });
 
-    it("should format a multi line test indented with spaces", function () {
+    it('should format a multi line test indented with spaces', function () {
       // and no new lines after curly braces, shouldn't matter
       var fn = [
-        "function(){  var a = 1;"
-        , "    var b = 2;" // this one has more spaces
-        , "  var c = 3;  }"
-      ].join("\n");
-      expect(utils.clean(fn)).to.equal("var a = 1;\n  var b = 2;\nvar c = 3;");
+        'function(){  var a = 1;',
+        // this one has more spaces
+        '    var b = 2;',
+        '  var c = 3;  }'
+      ].join('\n');
+      expect(utils.clean(fn)).to.equal('var a = 1;\n  var b = 2;\nvar c = 3;');
     });
 
-    it("should format a multi line test indented with tabs", function () {
+    it('should format a multi line test indented with tabs', function () {
       var fn = [
-        "function (arg1, arg2)   {"
-        , "\tif (true) {"
-        , "\t\tvar a = 1;"
-        , "\t}"
-        , "}"
-      ].join("\n");
-      expect(utils.clean(fn)).to.equal("if (true) {\n\tvar a = 1;\n}");
+        'function (arg1, arg2)   {',
+        '\tif (true) {',
+        '\t\tvar a = 1;',
+        '\t}',
+        '}'
+      ].join('\n');
+      expect(utils.clean(fn)).to.equal('if (true) {\n\tvar a = 1;\n}');
     });
 
-    it("should format functions saved in windows style - spaces", function () {
+    it('should format functions saved in windows style - spaces', function () {
       var fn = [
-        "function (one) {"
-        , "   do {"
-        , '    "nothing";'
-        , "   } while (false);"
-        , ' }'
-      ].join("\r\n");
+        'function (one) {',
+        '   do {',
+        '    "nothing";',
+        '   } while (false);',
+        ' }'
+      ].join('\r\n');
       expect(utils.clean(fn)).to.equal('do {\n "nothing";\n} while (false);');
     });
 
-    it("should format functions saved in windows style - tabs", function () {
+    it('should format functions saved in windows style - tabs', function () {
       var fn = [
-        "function ( )   {"
-        , "\tif (false) {"
-        , "\t\tvar json = {"
-        , '\t\t\tone : 1'
-        , '\t\t};'
-        , "\t}"
-        , "}"
-      ].join("\r\n");
-      expect(utils.clean(fn)).to.equal("if (false) {\n\tvar json = {\n\t\tone : 1\n\t};\n}");
-    });
-
-    it("should format es6 arrow functions", function () {
+        'function ( )   {',
+        '\tif (false) {',
+        '\t\tvar json = {',
+        '\t\t\tone : 1',
+        '\t\t};',
+        '\t}',
+        '}'
+      ].join('\r\n');
+      expect(utils.clean(fn)).to.equal('if (false) {\n\tvar json = {\n\t\tone : 1\n\t};\n}');
+    });
+
+    it('should format es6 arrow functions', function () {
       var fn = [
-        "() => {",
-        "  var a = 1;",
-        "}"
-      ].join("\n");
-      expect(utils.clean(fn)).to.equal("var a = 1;");
+        '() => {',
+        '  var a = 1;',
+        '}'
+      ].join('\n');
+      expect(utils.clean(fn)).to.equal('var a = 1;');
     });
 
-    it("should format es6 arrow functions with implicit return", function () {
-      var fn = "() => foo()";
-      expect(utils.clean(fn)).to.equal("foo()");
+    it('should format es6 arrow functions with implicit return', function () {
+      var fn = '() => foo()';
+      expect(utils.clean(fn)).to.equal('foo()');
     });
   });
 
-  describe('stringify', function(){
-
+  describe('stringify', function () {
     var stringify = utils.stringify;
 
-    it('should return an object representation of a string created with a String constructor', function() {
+    it('should return an object representation of a string created with a String constructor', function () {
+      /* eslint no-new-wrappers: off */
       expect(stringify(new String('foo'))).to.equal('{\n  "0": "f"\n  "1": "o"\n  "2": "o"\n}');
     });
 
-    it('should return Buffer with .toJSON representation', function() {
+    it('should return Buffer with .toJSON representation', function () {
       expect(stringify(new Buffer([0x01]))).to.equal('[\n  1\n]');
       expect(stringify(new Buffer([0x01, 0x02]))).to.equal('[\n  1\n  2\n]');
 
       expect(stringify(new Buffer('ABCD'))).to.equal('[\n  65\n  66\n  67\n  68\n]');
     });
 
-    it('should return Date object with .toISOString() + string prefix', function() {
+    it('should return Date object with .toISOString() + string prefix', function () {
       expect(stringify(new Date(0))).to.equal('[Date: ' + shimToISOString(new Date(0)) + ']');
 
       var date = new Date(); // now
       expect(stringify(date)).to.equal('[Date: ' + shimToISOString(date) + ']');
 
-      function shimToISOString(date) {
+      function shimToISOString (date) {
         if (date.toISOString) {
           return date.toISOString();
         } else {
@@ -103,32 +106,32 @@ describe('lib/utils', function () {
       }
     });
 
-    it('should return invalid Date object with .toString() + string prefix', function() {
+    it('should return invalid Date object with .toString() + string prefix', function () {
       expect(stringify(new Date(''))).to.equal('[Date: ' + new Date('').toString() + ']');
     });
 
-    describe('#Number', function() {
-      it('should show the handle -0 situations', function() {
+    describe('#Number', function () {
+      it('should show the handle -0 situations', function () {
         expect(stringify(-0)).to.eql('-0');
         expect(stringify(0)).to.eql('0');
         expect(stringify('-0')).to.eql('"-0"');
       });
 
-      it('should work well with `NaN` and `Infinity`', function() {
+      it('should work well with `NaN` and `Infinity`', function () {
         expect(stringify(NaN)).to.equal('NaN');
         expect(stringify(Infinity)).to.equal('Infinity');
         expect(stringify(-Infinity)).to.equal('-Infinity');
       });
 
-      it('floats and ints', function() {
+      it('floats and ints', function () {
         expect(stringify(1)).to.equal('1');
         expect(stringify(1.2)).to.equal('1.2');
         expect(stringify(1e9)).to.equal('1000000000');
       });
     });
 
-    describe('canonicalize example', function() {
-      it('should represent the actual full result', function() {
+    describe('canonicalize example', function () {
+      it('should represent the actual full result', function () {
         var expected = {
           str: 'string',
           int: 90,
@@ -138,148 +141,155 @@ describe('lib/utils', function () {
           undef: undefined,
           regex: /^[a-z|A-Z]/,
           date: new Date(0),
-          func: function() {},
+          func: function () {},
           infi: Infinity,
           nan: NaN,
           zero: -0,
           buffer: new Buffer([0x01, 0x02]),
-          array: [1,2,3],
+          array: [1, 2, 3],
           empArr: [],
-          matrix: [[1], [2,3,4] ],
+          matrix: [[1],
+            [
+              2,
+              3,
+              4
+            ]
+          ],
           object: { a: 1, b: 2 },
           canObj: { a: { b: 1, c: 2 }, b: {} },
           empObj: {}
         };
         expected.circular = expected; // Make `Circular` situation
-        var actual = ['{'
-          , '  "array": ['
-          , '    1'
-          , '    2'
-          , '    3'
-          , '  ]'
-          , '  "boolean": false'
-          , '  "buffer": [Buffer: ['
-          , '    1'
-          , '    2'
-          , '  ]]'
-          , '  "canObj": {'
-          , '    "a": {'
-          , '      "b": 1'
-          , '      "c": 2'
-          , '    }'
-          , '    "b": {}'
-          , '  }'
-          , '  "circular": [Circular]'
-          , '  "date": [Date: 1970-01-01T00:00:00.000Z]'
-          , '  "empArr": []'
-          , '  "empObj": {}'
-          , '  "float": 9.99'
-          , '  "func": [Function]'
-          , '  "infi": Infinity'
-          , '  "int": 90'
-          , '  "matrix": ['
-          , '    ['
-          , '      1'
-          , '    ]'
-          , '    ['
-          , '      2'
-          , '      3'
-          , '      4'
-          , '    ]'
-          , '  ]'
-          , '  "nan": NaN'
-          , '  "nil": [null]'
-          , '  "object": {'
-          , '    "a": 1'
-          , '    "b": 2'
-          , '  }'
-          , '  "regex": /^[a-z|A-Z]/'
-          , '  "str": "string"'
-          , '  "undef": [undefined]'
-          , '  "zero": -0'
-          , '}'].join('\n');
+        var actual = [
+          '{',
+          '  "array": [',
+          '    1',
+          '    2',
+          '    3',
+          '  ]',
+          '  "boolean": false',
+          '  "buffer": [Buffer: [',
+          '    1',
+          '    2',
+          '  ]]',
+          '  "canObj": {',
+          '    "a": {',
+          '      "b": 1',
+          '      "c": 2',
+          '    }',
+          '    "b": {}',
+          '  }',
+          '  "circular": [Circular]',
+          '  "date": [Date: 1970-01-01T00:00:00.000Z]',
+          '  "empArr": []',
+          '  "empObj": {}',
+          '  "float": 9.99',
+          '  "func": [Function]',
+          '  "infi": Infinity',
+          '  "int": 90',
+          '  "matrix": [',
+          '    [',
+          '      1',
+          '    ]',
+          '    [',
+          '      2',
+          '      3',
+          '      4',
+          '    ]',
+          '  ]',
+          '  "nan": NaN',
+          '  "nil": [null]',
+          '  "object": {',
+          '    "a": 1',
+          '    "b": 2',
+          '  }',
+          '  "regex": /^[a-z|A-Z]/',
+          '  "str": "string"',
+          '  "undef": [undefined]',
+          '  "zero": -0',
+          '}'
+        ].join('\n');
         expect(stringify(expected)).to.equal(actual);
       });
     });
 
-    it('should canonicalize the object', function(){
+    it('should canonicalize the object', function () {
       var travis = { name: 'travis', age: 24 };
       var travis2 = { age: 24, name: 'travis' };
 
       expect(stringify(travis)).to.equal(stringify(travis2));
     });
 
-    it('should handle circular structures in objects', function(){
+    it('should handle circular structures in objects', function () {
       var travis = { name: 'travis' };
       travis.whoami = travis;
 
       expect(stringify(travis)).to.equal('{\n  "name": "travis"\n  "whoami": [Circular]\n}');
     });
 
-    it('should handle circular structures in arrays', function(){
+    it('should handle circular structures in arrays', function () {
       var travis = ['travis'];
       travis.push(travis);
 
       expect(stringify(travis)).to.equal('[\n  "travis"\n  [Circular]\n]');
     });
 
-    it('should handle circular structures in functions', function(){
+    it('should handle circular structures in functions', function () {
       var travis = function () {};
       travis.fn = travis;
 
       expect(stringify(travis)).to.equal('{\n  "fn": [Circular]\n}');
     });
 
-
     it('should handle various non-undefined, non-null, non-object, non-array, non-date, and non-function values', function () {
-      var regexp = new RegExp("(?:)"),
-        regExpObj = { regexp: regexp },
-        regexpString = '/(?:)/';
+      var regexp = new RegExp('(?:)');
+      var regExpObj = {regexp: regexp};
+      var regexpString = '/(?:)/';
 
       expect(stringify(regExpObj)).to.equal('{\n  "regexp": ' + regexpString + '\n}');
       expect(stringify(regexp)).to.equal(regexpString);
 
-      var number = 1,
-        numberObj = { number: number },
-        numberString = '1';
+      var number = 1;
+      var numberObj = {number: number};
+      var numberString = '1';
 
       expect(stringify(numberObj)).to.equal('{\n  "number": ' + number + '\n}');
       expect(stringify(number)).to.equal(numberString);
 
-      var boolean = false,
-        booleanObj = { boolean: boolean },
-        booleanString = 'false';
+      var boolean = false;
+      var booleanObj = {boolean: boolean};
+      var booleanString = 'false';
 
       expect(stringify(booleanObj)).to.equal('{\n  "boolean": ' + boolean + '\n}');
       expect(stringify(boolean)).to.equal(booleanString);
 
-      var string = 'sneepy',
-        stringObj = { string: string };
+      var string = 'sneepy';
+      var stringObj = {string: string};
 
       expect(stringify(stringObj)).to.equal('{\n  "string": "' + string + '"\n}');
       expect(stringify(string)).to.equal(JSON.stringify(string));
 
-      var nullValue = null,
-        nullObj = { 'null': null },
-        nullString = '[null]';
+      var nullValue = null;
+      var nullObj = {'null': null};
+      var nullString = '[null]';
 
       expect(stringify(nullObj)).to.equal('{\n  "null": [null]\n}');
       expect(stringify(nullValue)).to.equal(nullString);
     });
 
     it('should handle arrays', function () {
-      var array = ['dave', 'dave', 'dave', 'dave'],
-        arrayObj = {array: array},
-        arrayString = '    "dave"\n    "dave"\n    "dave"\n    "dave"'
+      var array = ['dave', 'dave', 'dave', 'dave'];
+      var arrayObj = {array: array};
+      var arrayString = '    "dave"\n    "dave"\n    "dave"\n    "dave"';
 
       expect(stringify(arrayObj)).to.equal('{\n  "array": [\n' + arrayString + '\n  ]\n}');
       expect(stringify(array)).to.equal('[' + arrayString.replace(/\s+/g, '\n  ') + '\n]');
     });
 
     it('should handle functions', function () {
-      var fn = function() {},
-        fnObj = {fn: fn},
-        fnString = '[Function]';
+      var fn = function () {};
+      var fnObj = {fn: fn};
+      var fnString = '[Function]';
 
       expect(stringify(fnObj)).to.equal('{\n  "fn": ' + fnString + '\n}');
       expect(stringify(fn)).to.equal('[Function]');
@@ -296,17 +306,17 @@ describe('lib/utils', function () {
     });
 
     it('should handle non-empty arrays', function () {
-      expect(stringify(['a', 'b', 'c'])).to.equal('[\n  "a"\n  "b"\n  "c"\n]')
+      expect(stringify(['a', 'b', 'c'])).to.equal('[\n  "a"\n  "b"\n  "c"\n]');
     });
 
     it('should handle empty functions (with no properties)', function () {
-      expect(stringify(function(){})).to.equal('[Function]');
-      expect(stringify({foo: function() {}})).to.equal('{\n  "foo": [Function]\n}');
-      expect(stringify({foo: function() {}, bar: 'baz'})).to.equal('{\n  "bar": "baz"\n  "foo": [Function]\n}');
+      expect(stringify(function () {})).to.equal('[Function]');
+      expect(stringify({foo: function () {}})).to.equal('{\n  "foo": [Function]\n}');
+      expect(stringify({foo: function () {}, bar: 'baz'})).to.equal('{\n  "bar": "baz"\n  "foo": [Function]\n}');
     });
 
     it('should handle functions w/ properties', function () {
-      var fn = function(){};
+      var fn = function () {};
       fn.bar = 'baz';
       expect(stringify(fn)).to.equal('{\n  "bar": "baz"\n}');
       expect(stringify({foo: fn})).to.equal('{\n  "foo": {\n    "bar": "baz"\n  }\n}');
@@ -354,23 +364,25 @@ describe('lib/utils', function () {
       it('should handle Symbol', function () {
         var symbol = Symbol('value');
         expect(stringify(symbol)).to.equal('Symbol(value)');
-        expect(stringify({symbol: symbol})).to.equal('{\n  "symbol": Symbol(value)\n}')
+        expect(stringify({symbol: symbol})).to.equal('{\n  "symbol": Symbol(value)\n}');
       });
     }
 
     it('should handle length properties that cannot be coerced to a number', function () {
       expect(stringify({length: {nonBuiltinProperty: 0}})).to.equal('{\n  "length": {\n    "nonBuiltinProperty": 0\n  }\n}');
-      expect(stringify({length: "a string where length should be"})).to.equal('{\n  "length": "a string where length should be"\n}');
+      expect(stringify({length: 'a string where length should be'})).to.equal('{\n  "length": "a string where length should be"\n}');
     });
   });
 
   describe('type', function () {
+    /* eslint no-extend-native: off */
+
     var type = utils.type;
     var toString = Object.prototype.toString;
 
-    beforeEach(function() {
+    beforeEach(function () {
       // some JS engines such as PhantomJS 1.x exhibit this behavior
-      Object.prototype.toString = function() {
+      Object.prototype.toString = function () {
         if (this === global) {
           return '[object DOMWindow]';
         }
diff --git a/test/browser-fixtures/bdd.fixture.js b/test/browser-fixtures/bdd.fixture.js
index 72b4a8a47c..d19993676a 100644
--- a/test/browser-fixtures/bdd.fixture.js
+++ b/test/browser-fixtures/bdd.fixture.js
@@ -1,3 +1,5 @@
+'use strict';
+
 /* eslint-env browser */
 
 window.mocha.timeout(200)
diff --git a/test/browser-fixtures/exports.fixture.js b/test/browser-fixtures/exports.fixture.js
index 32c26a12ff..97b8b97cbe 100644
--- a/test/browser-fixtures/exports.fixture.js
+++ b/test/browser-fixtures/exports.fixture.js
@@ -1,3 +1,5 @@
+'use strict';
+
 /* eslint-env browser */
 
 window.mocha.timeout(200)
diff --git a/test/browser-fixtures/qunit.fixture.js b/test/browser-fixtures/qunit.fixture.js
index 8804d0b994..a3fd887940 100644
--- a/test/browser-fixtures/qunit.fixture.js
+++ b/test/browser-fixtures/qunit.fixture.js
@@ -1,3 +1,5 @@
+'use strict';
+
 /* eslint-env browser */
 
 window.mocha.timeout(200)
diff --git a/test/browser-fixtures/tdd.fixture.js b/test/browser-fixtures/tdd.fixture.js
index 997a47dc18..0c36f0c54b 100644
--- a/test/browser-fixtures/tdd.fixture.js
+++ b/test/browser-fixtures/tdd.fixture.js
@@ -1,3 +1,5 @@
+'use strict';
+
 /* eslint-env browser */
 
 window.mocha.timeout(200)
diff --git a/test/browser/array.spec.js b/test/browser/array.spec.js
index 26404f6a90..edf66ac458 100644
--- a/test/browser/array.spec.js
+++ b/test/browser/array.spec.js
@@ -1,38 +1,39 @@
-describe('Array', function(){
-  describe('#push()', function(){
-    it('should append a value', function(){
-      foo = 'asdf'
+'use strict';
+
+describe('Array', function () {
+  describe('#push()', function () {
+    it('should append a value', function () {
       var arr = [];
       arr.push('foo');
       arr.push('bar');
       arr.push('baz');
-        assert('foo' == arr[0]); // to test indentation
-        assert('bar' == arr[1]);
-      assert('baz' == arr[2]);
-    })
+      assert(arr[0] === 'foo'); // to test indentation
+      assert(arr[1] === 'bar');
+      assert(arr[2] === 'baz');
+    });
 
-    it('should return the length', function(){
+    it('should return the length', function () {
       var arr = [];
-      assert(1 == arr.push('foo'));
-      assert(2 == arr.push('bar'));
-      assert(3 == arr.push('baz'));
-    })
-  })
-})
+      assert(arr.push('foo') === 1);
+      assert(arr.push('bar') === 2);
+      assert(arr.push('baz') === 3);
+    });
+  });
+});
 
-describe('Array', function(){
-  describe('#pop()', function(){
-    it('should remove and return the last value', function(){
-      var arr = [1,2,3];
-      assert(arr.pop() == 3);
-      assert(arr.pop() == 2);
-      assert(arr.pop() == -1);
-    })
+describe('Array', function () {
+  describe('#pop()', function () {
+    it('should remove and return the last value', function () {
+      var arr = [1, 2, 3];
+      assert(arr.pop() === 3);
+      assert(arr.pop() === 2);
+      assert(arr.pop() === -1);
+    });
 
-    it('should adjust .length', function(){
-      var arr = [1,2,3];
+    it('should adjust .length', function () {
+      var arr = [1, 2, 3];
       arr.pop();
-      assert(arr.length == 2);
-    })
-  })
-})
+      assert(arr.length === 2);
+    });
+  });
+});
diff --git a/test/browser/grep.spec.js b/test/browser/grep.spec.js
index 9531b87aa9..6c5a83aeb5 100644
--- a/test/browser/grep.spec.js
+++ b/test/browser/grep.spec.js
@@ -1,108 +1,110 @@
+'use strict';
+
 // numbers
-describe('21', function() {
-  it('1', function() {
+describe('21', function () {
+  it('1', function () {
     assert(true);
   });
-  it('2', function() {
+  it('2', function () {
     assert(true);
   });
 });
 // symbols
-describe('@Array', function() {
-  it('.pop()', function() {
+describe('@Array', function () {
+  it('.pop()', function () {
     assert(true);
   });
-  it('.push()', function() {
+  it('.push()', function () {
     assert(true);
   });
-  it('.length', function() {
+  it('.length', function () {
     assert(true);
   });
 });
 
-describe('@Function', function() {
-  it('.call()', function() {
+describe('@Function', function () {
+  it('.call()', function () {
     assert(true);
   });
-  it('.apply()', function() {
+  it('.apply()', function () {
     assert(true);
   });
-  it('.length', function() {
+  it('.length', function () {
     assert(true);
   });
-  it('.name', function() {
+  it('.name', function () {
     assert(true);
   });
-  it('.prototype', function() {
+  it('.prototype', function () {
     assert(true);
   });
 });
 
-//url with hashtags
-describe('#Services',function() {
-  describe('#http', function() {
-    it('.createClient()', function() {
+// url with hashtags
+describe('#Services', function () {
+  describe('#http', function () {
+    it('.createClient()', function () {
       assert(true);
     });
-    it('.Server()', function() {
+    it('.Server()', function () {
       assert(true);
     });
   });
-  describe('#crypto', function() {
-    it('.randomBytes()', function() {
+  describe('#crypto', function () {
+    it('.randomBytes()', function () {
       assert(true);
     });
-    it('.Hmac()', function() {
+    it('.Hmac()', function () {
       assert(true);
     });
   });
 });
 
 // Uppercase
-describe('CONSTANTS', function() {
-  it('.STATUS_CODES', function() {
+describe('CONSTANTS', function () {
+  it('.STATUS_CODES', function () {
     assert(true);
   });
 });
 
 // Dates
-describe('Date:', function() {
-  it('01/02/2015', function() {
+describe('Date:', function () {
+  it('01/02/2015', function () {
     assert(true);
   });
-  it('01/03/2015', function() {
+  it('01/03/2015', function () {
     assert(true);
   });
-  it('01/06/2015', function() {
+  it('01/06/2015', function () {
     assert(true);
   });
 });
 
 // etc..
-describe('booking/summary', function() {
-  it('should be run last', function() {
+describe('booking/summary', function () {
+  it('should be run last', function () {
     assert(true);
   });
 });
 
-describe('component/booking/summary', function() {
-  it('should be run second', function() {
+describe('component/booking/summary', function () {
+  it('should be run second', function () {
     assert(true);
   });
 });
 
-describe('component/booking/intro', function() {
-  it('should be run first', function() {
+describe('component/booking/intro', function () {
+  it('should be run first', function () {
     assert(true);
   });
 });
 
-describe('contains numbers', function() {
-  it('should run if the number 92 matching', function() {
+describe('contains numbers', function () {
+  it('should run if the number 92 matching', function () {
     assert(true);
   });
 
-  it('should run if the number 8 matching', function() {
+  it('should run if the number 8 matching', function () {
     assert(true);
   });
-});
\ No newline at end of file
+});
diff --git a/test/browser/large.spec.js b/test/browser/large.spec.js
index 56757eae27..7dfa62f2a2 100644
--- a/test/browser/large.spec.js
+++ b/test/browser/large.spec.js
@@ -1,37 +1,38 @@
+'use strict';
+
 var n = 30;
 while (n--) {
-  describe('Array ' + n, function(){
+  describe('Array ' + n, function () {
     var arr;
 
-    beforeEach(function(){
-      arr = [1,2,3];
-    })
+    beforeEach(function () {
+      arr = [1, 2, 3];
+    });
 
-    describe('#indexOf()', function(){
-      it('should return -1 when the value is not present', function(){
-        assert(-1 == arr.indexOf(5));
-      })
+    describe('#indexOf()', function () {
+      it('should return -1 when the value is not present', function () {
+        assert(arr.indexOf(5) === -1);
+      });
 
-      it('should return the correct index when the value is present', function(done){
-        assert(0 == arr.indexOf(1));
-        assert(1 == arr.indexOf(2));
+      it('should return the correct index when the value is present', function (done) {
+        assert(arr.indexOf(1) === 0);
+        assert(arr.indexOf(2) === 1);
         done();
-      })
-    })
-  })
+      });
+    });
+  });
 }
 
-describe('something', function(){
-  it('should provide a useful error', function(done){
-    setTimeout(function(){
+describe('something', function () {
+  it('should provide a useful error', function (done) {
+    setTimeout(function () {
       throw new Error('boom');
-      done();
     }, 1);
-  })
+  });
 
-  it('should provide an even better error on phantomjs', function(done){
-    setTimeout(function(){
-      var AssertionError = function(message, actual, expected) {
+  it('should provide an even better error on phantomjs', function (done) {
+    setTimeout(function () {
+      var AssertionError = function (message, actual, expected) {
         this.message = message;
         this.actual = actual;
         this.expected = expected;
@@ -44,5 +45,5 @@ describe('something', function(){
       mocha.throwError(new AssertionError('kabooom', 'text with a typo', 'text without a typo'));
       done();
     }, 1);
-  })
-})
+  });
+});
diff --git a/test/browser/multiple-done.spec.js b/test/browser/multiple-done.spec.js
index d8a9d49ae2..ddb536735e 100644
--- a/test/browser/multiple-done.spec.js
+++ b/test/browser/multiple-done.spec.js
@@ -1,16 +1,18 @@
-describe('Multiple Done calls', function(){
-  it('should report an error if done was called more than once', function(done){
+'use strict';
+
+describe('Multiple Done calls', function () {
+  it('should report an error if done was called more than once', function (done) {
     done();
     done();
-  })
+  });
 
   it('should report an error if an exception happened async after done was called', function (done) {
     done();
     setTimeout(done, 50);
-  })
+  });
 
-  it('should report an error if an exception happened after done was called', function(done){
+  it('should report an error if an exception happened after done was called', function (done) {
     done();
-    throw new Error("thrown error");
-  })
-})
+    throw new Error('thrown error');
+  });
+});
diff --git a/test/browser/opts.spec.js b/test/browser/opts.spec.js
index dbbc9ff172..7b93f22615 100644
--- a/test/browser/opts.spec.js
+++ b/test/browser/opts.spec.js
@@ -1,5 +1,7 @@
-describe('Options', function() {
-  it('should set timeout value', function() {
+'use strict';
+
+describe('Options', function () {
+  it('should set timeout value', function () {
     assert(this.test._timeout === 1500);
   });
-})
+});
diff --git a/test/browser/stack-trace.spec.js b/test/browser/stack-trace.spec.js
index b39944db09..a4801bf32f 100644
--- a/test/browser/stack-trace.spec.js
+++ b/test/browser/stack-trace.spec.js
@@ -1,20 +1,22 @@
 'use strict';
-describe('Stack trace', function() {
-  it('should prettify the stack-trace', function() {
+describe('Stack trace', function () {
+  it('should prettify the stack-trace', function () {
     var err = new Error();
     // We do this fake stack-trace because we under development,
     // and our root isn't `node_modules`, `bower` or `components`
-    err.stack = ['Error: failed'
-      , 'at assert (stack-trace.html:11:30)'
-      , 'at Context.<anonymous> (stack-trace.js:5:5)'
-      , 'at callFn (http://localhost:63342/node_modules/mocha.js:4546:21)'
-      , 'at Test.require.register.Runnable.run (http://localhost:63342/node_modules/mocha.js:4539:7)'
-      , 'at Runner.require.register.Runner.runTest (http://localhost:63342/node_modules/mocha.js:4958:10)'
-      , 'at http://localhost:63342/bower_components/mocha.js:5041:12'
-      , 'at next (http://localhost:63342/bower_components/mocha.js:4883:14)'
-      , 'at http://localhost:63342/bower_components/mocha.js:4893:7'
-      , 'at next (http://localhost:63342/bower_components/mocha.js:4828:23)'
-      , 'at http://localhost:63342/bower_components/mocha.js:4860:5'].join('\n');
+    err.stack = [
+      'Error: failed',
+      'at assert (stack-trace.html:11:30)',
+      'at Context.<anonymous> (stack-trace.js:5:5)',
+      'at callFn (http://localhost:63342/node_modules/mocha.js:4546:21)',
+      'at Test.require.register.Runnable.run (http://localhost:63342/node_modules/mocha.js:4539:7)',
+      'at Runner.require.register.Runner.runTest (http://localhost:63342/node_modules/mocha.js:4958:10)',
+      'at http://localhost:63342/bower_components/mocha.js:5041:12',
+      'at next (http://localhost:63342/bower_components/mocha.js:4883:14)',
+      'at http://localhost:63342/bower_components/mocha.js:4893:7',
+      'at next (http://localhost:63342/bower_components/mocha.js:4828:23)',
+      'at http://localhost:63342/bower_components/mocha.js:4860:5'
+    ].join('\n');
     assert(false, err);
   });
-});
\ No newline at end of file
+});
diff --git a/test/browser/ui.spec.js b/test/browser/ui.spec.js
index 48236e9497..159cab6d95 100644
--- a/test/browser/ui.spec.js
+++ b/test/browser/ui.spec.js
@@ -1,10 +1,12 @@
+'use strict';
+
 // test titles containing regex-conflicting characters
 
 // leading $
-describe('$.jQuery', function() {
+describe('$.jQuery', function () {
   // parens
   describe('.on()', function () {
-    it('should set an event', function() {
+    it('should set an event', function () {
       assert(true);
     });
   });
@@ -18,14 +20,14 @@ describe('$.jQuery', function() {
 
 // another generic describe block to verify it is absent
 // when greeping on $.jQuery
-describe('@Array', function() {
-  it('.pop()', function() {
+describe('@Array', function () {
+  it('.pop()', function () {
     assert(true);
   });
-  it('.push()', function() {
+  it('.push()', function () {
     assert(true);
   });
-  it('.length', function() {
+  it('.length', function () {
     assert(true);
   });
 });
diff --git a/test/color.spec.js b/test/color.spec.js
index 5ee46e71c4..bffd30e6eb 100644
--- a/test/color.spec.js
+++ b/test/color.spec.js
@@ -1,13 +1,15 @@
+'use strict';
+
 var assert = require('assert');
-var child_process = require('child_process');
+var childProcess = require('child_process');
 var path = require('path');
 
-describe('Mocha', function() {
+describe('Mocha', function () {
   this.timeout(2000);
 
-  it('should not output colors to pipe', function(cb) {
+  it('should not output colors to pipe', function (cb) {
     var command = [path.join('bin', 'mocha'), '--grep', 'missing-test'];
-    child_process.execFile(process.execPath, command, function(err, stdout, stderr) {
+    childProcess.execFile(process.execPath, command, function (err, stdout, stderr) {
       if (err) return cb(err);
 
       assert(stdout.indexOf('[90m') === -1);
diff --git a/test/compiler/foo.js b/test/compiler/foo.js
index b13101a77b..753d08e740 100644
--- a/test/compiler/foo.js
+++ b/test/compiler/foo.js
@@ -1,8 +1,10 @@
+'use strict';
+
 var fs = require('fs');
-require.extensions['.foo'] = function(module, filename) {
+require.extensions['.foo'] = function (module, filename) {
   var content;
   content = fs.readFileSync(filename, 'utf8');
-  var test = 'describe("custom compiler",function(){ it("should work",function() { '
-    + content + '.should.eql(1); }); });';
+  var test = 'describe("custom compiler",function(){ it("should work",function() { ' +
+    content + '.should.eql(1); }); });';
   return module._compile(test, filename);
 };
diff --git a/test/fixture-expect.js b/test/fixture-expect.js
deleted file mode 100644
index cacc78425a..0000000000
--- a/test/fixture-expect.js
+++ /dev/null
@@ -1 +0,0 @@
-global.expect = require("expect.js")
diff --git a/test/grep.spec.js b/test/grep.spec.js
index bbc5c55eba..dd21cf0090 100644
--- a/test/grep.spec.js
+++ b/test/grep.spec.js
@@ -1,48 +1,50 @@
+'use strict';
+
 var Mocha = require('../');
 
-describe('Mocha', function(){
-  describe('"grep" option', function(){
-    it('should add a RegExp to the mocha.options object', function(){
+describe('Mocha', function () {
+  describe('"grep" option', function () {
+    it('should add a RegExp to the mocha.options object', function () {
       var mocha = new Mocha({ grep: /foo.*/ });
       mocha.options.grep.toString().should.equal('/foo.*/');
     });
 
-    it('should convert string to a RegExp', function(){
+    it('should convert string to a RegExp', function () {
       var mocha = new Mocha({ grep: 'foo.*' });
       mocha.options.grep.toString().should.equal('/foo.*/');
     });
   });
 
-  describe('"fgrep" option', function(){
-    it('should escape and convert string to a RegExp', function(){
+  describe('"fgrep" option', function () {
+    it('should escape and convert string to a RegExp', function () {
       var mocha = new Mocha({ fgrep: 'foo.*' });
       mocha.options.grep.toString().should.equal('/foo\\.\\*/');
     });
   });
 
-  describe('.grep()', function() {
+  describe('.grep()', function () {
     // Test helper
-    function testGrep(mocha) {
-      return function testGrep(grep, expected) {
+    function testGrep (mocha) {
+      return function testGrep (grep, expected) {
         mocha.grep(grep);
         mocha.options.grep.toString().should.equal(expected);
-      }
+      };
     }
 
-    it('should add a RegExp to the mocha.options object', function() {
-      var test = testGrep(new Mocha);
+    it('should add a RegExp to the mocha.options object', function () {
+      var test = testGrep(new Mocha());
       test(/foo/, '/foo/');
     });
 
-    it('should convert grep string to a RegExp', function() {
-      var test = testGrep(new Mocha);
+    it('should convert grep string to a RegExp', function () {
+      var test = testGrep(new Mocha());
       test('foo', '/foo/');
       test('^foo.*bar$', '/^foo.*bar$/');
       test('^@.*(?=\\(\\)$)', '/^@.*(?=\\(\\)$)/');
     });
 
-    it('should covert grep regex-like string to a RegExp', function() {
-      var test = testGrep(new Mocha);
+    it('should covert grep regex-like string to a RegExp', function () {
+      var test = testGrep(new Mocha());
       test('/foo/', '/foo/');
       // Keep the flags
       test('/baz/i', '/baz/i');
@@ -50,14 +52,14 @@ describe('Mocha', function(){
       test('/^foo(.*)bar/g', '/^foo(.*)bar/g');
     });
 
-    it('should return it\'s parent Mocha object for chainability', function(){
-      var mocha = new Mocha;
+    it('should return it\'s parent Mocha object for chainability', function () {
+      var mocha = new Mocha();
       mocha.grep().should.equal(mocha);
     });
   });
 
-  describe('"invert" option', function(){
-    it('should add a Boolean to the mocha.options object', function(){
+  describe('"invert" option', function () {
+    it('should add a Boolean to the mocha.options object', function () {
       var mocha = new Mocha({ invert: true });
       mocha.options.invert.should.be.ok;
     });
diff --git a/test/hook-async.spec.js b/test/hook-async.spec.js
index ae6e642d24..a03821e32c 100644
--- a/test/hook-async.spec.js
+++ b/test/hook-async.spec.js
@@ -1,129 +1,135 @@
-describe('async', function(){
+'use strict';
+
+describe('async', function () {
   var calls = [];
 
-  before(function(){
+  before(function () {
     calls.push('root before all');
-  })
+  });
 
-  after(function(){
+  after(function () {
     calls.push('root after all');
     calls.should.eql([
-        'root before all'
-      , 'before all'
-      , 'parent before'
-      , 'before'
-      , 'before test one'
-      , 'one'
-      , 'after'
-      , 'after test one passed'
-      , 'parent after'
-      , 'parent before'
-      , 'before'
-      , 'before test two'
-      , 'two'
-      , 'after'
-      , 'after test two passed'
-      , 'parent after'
-      , 'parent before'
-      , 'before'
-      , 'before test three'
-      , 'three'
-      , 'after'
-      , 'after test three passed'
-      , 'parent after'
-      , 'after all'
-      , 'root after all']);
-  })
+      'root before all',
+      'before all',
+      'parent before',
+      'before',
+      'before test one',
+      'one',
+      'after',
+      'after test one passed',
+      'parent after',
+      'parent before',
+      'before',
+      'before test two',
+      'two',
+      'after',
+      'after test two passed',
+      'parent after',
+      'parent before',
+      'before',
+      'before test three',
+      'three',
+      'after',
+      'after test three passed',
+      'parent after',
+      'after all',
+      'root after all'
+    ]);
+  });
 
-  beforeEach(function(){
+  beforeEach(function () {
     calls.push('parent before');
-  })
+  });
 
-  afterEach(function(){
-    calls.push('parent after' );
-  })
+  afterEach(function () {
+    calls.push('parent after');
+  });
 
-  describe('hooks', function(){
-    before(function(){
+  describe('hooks', function () {
+    before(function () {
       calls.push('before all');
     });
 
-    after(function(){
+    after(function () {
       calls.push('after all');
     });
 
-    beforeEach(function(done){
+    beforeEach(function (done) {
       var ctx = this;
-      process.nextTick(function(){
+      process.nextTick(function () {
         calls.push('before');
         if (ctx.currentTest) {
           calls.push('before test ' + ctx.currentTest.title);
         }
         done();
-      })
-    })
+      });
+    });
 
-    it('one', function(done){
+    it('one', function (done) {
       calls.should.eql([
-          'root before all'
-        , 'before all'
-        , 'parent before'
-        , 'before'
-        , 'before test one']);
+        'root before all',
+        'before all',
+        'parent before',
+        'before',
+        'before test one'
+      ]);
       calls.push('one');
       process.nextTick(done);
-    })
+    });
 
-    it('two', function(){
+    it('two', function () {
       calls.should.eql([
-          'root before all'
-        , 'before all'
-        , 'parent before'
-        , 'before'
-        , 'before test one'
-        , 'one'
-        , 'after'
-        , 'after test one passed'
-        , 'parent after'
-        , 'parent before'
-        , 'before'
-        , 'before test two']);
+        'root before all',
+        'before all',
+        'parent before',
+        'before',
+        'before test one',
+        'one',
+        'after',
+        'after test one passed',
+        'parent after',
+        'parent before',
+        'before',
+        'before test two'
+      ]);
       calls.push('two');
-    })
+    });
 
-    it('three', function(){
+    it('three', function () {
       calls.should.eql([
-          'root before all'
-        , 'before all'
-        , 'parent before'
-        , 'before'
-        , 'before test one'
-        , 'one'
-        , 'after'
-        , 'after test one passed'
-        , 'parent after'
-        , 'parent before'
-        , 'before'
-        , 'before test two'
-        , 'two'
-        , 'after'
-        , 'after test two passed'
-        , 'parent after'
-        , 'parent before'
-        , 'before'
-        , 'before test three']);
+        'root before all',
+        'before all',
+        'parent before',
+        'before',
+        'before test one',
+        'one',
+        'after',
+        'after test one passed',
+        'parent after',
+        'parent before',
+        'before',
+        'before test two',
+        'two',
+        'after',
+        'after test two passed',
+        'parent after',
+        'parent before',
+        'before',
+        'before test three'
+      ]);
       calls.push('three');
-    })
+    });
 
-    afterEach(function(done){
+    afterEach(function (done) {
       var ctx = this;
-      process.nextTick(function(){
+      process.nextTick(function () {
         calls.push('after');
         if (ctx.currentTest) {
           calls.push('after test ' + ctx.currentTest.title + ' ' + ctx.currentTest.state);
         }
         done();
-      })
-    })
-  })
-})
+      });
+    });
+  });
+});
diff --git a/test/hook-sync-nested.spec.js b/test/hook-sync-nested.spec.js
index b87c22298f..3f1929f547 100644
--- a/test/hook-sync-nested.spec.js
+++ b/test/hook-sync-nested.spec.js
@@ -1,98 +1,104 @@
-describe('serial', function(){
-  describe('nested', function(){
+'use strict';
+
+describe('serial', function () {
+  describe('nested', function () {
     var calls = [];
 
-    beforeEach(function(){
+    beforeEach(function () {
       calls.push('parent before');
       if (this.currentTest) {
         calls.push('parent before test ' + this.currentTest.title);
       }
-    })
+    });
 
-    afterEach(function(){
+    afterEach(function () {
       calls.push('parent after');
       if (this.currentTest) {
         calls.push('parent after test ' + this.currentTest.title + ' ' + this.currentTest.state);
       }
     });
 
-    it('foo', function(){
+    it('foo', function () {
       calls.should.eql([
-          'parent before'
-        , 'parent before test foo']);
+        'parent before',
+        'parent before test foo'
+      ]);
       calls.push('foo');
-    })
+    });
 
-    it('bar', function(){
+    it('bar', function () {
       calls.should.eql([
-          'parent before'
-        , 'parent before test foo'
-        , 'foo'
-        , 'parent after'
-        , 'parent after test foo passed'
-        , 'parent before'
-        , 'parent before test bar']);
-    })
+        'parent before',
+        'parent before test foo',
+        'foo',
+        'parent after',
+        'parent after test foo passed',
+        'parent before',
+        'parent before test bar'
+      ]);
+    });
 
-    describe('hooks', function(){
-      beforeEach(function(){
+    describe('hooks', function () {
+      beforeEach(function () {
         calls.push('before');
         if (this.currentTest) {
           calls.push('before test ' + this.currentTest.title);
         }
-      })
+      });
 
-      it('one', function(){
+      it('one', function () {
         calls.should.eql([
-            'parent before'
-          , 'parent before test foo'
-          , 'foo'
-          , 'parent after'
-          , 'parent after test foo passed'
-          , 'parent before'
-          , 'parent before test bar'
-          , 'parent after'
-          , 'parent after test bar passed'
-          , 'parent before'
-          , 'parent before test one'
-          , 'before'
-          , 'before test one']);
+          'parent before',
+          'parent before test foo',
+          'foo',
+          'parent after',
+          'parent after test foo passed',
+          'parent before',
+          'parent before test bar',
+          'parent after',
+          'parent after test bar passed',
+          'parent before',
+          'parent before test one',
+          'before',
+          'before test one'
+        ]);
         calls.push('one');
-      })
+      });
 
-      it('two', function(){
+      it('two', function () {
         calls.should.eql([
-            'parent before'
-          , 'parent before test foo'
-          , 'foo'
-          , 'parent after'
-          , 'parent after test foo passed'
-          , 'parent before'
-          , 'parent before test bar'
-          , 'parent after'
-          , 'parent after test bar passed'
-          , 'parent before'
-          , 'parent before test one'
-          , 'before'
-          , 'before test one'
-          , 'one'
-          , 'after'
-          , 'after test one passed'
-          , 'parent after'
-          , 'parent after test one passed'
-          , 'parent before'
-          , 'parent before test two'
-          , 'before'
-          , 'before test two']);
+          'parent before',
+          'parent before test foo',
+          'foo',
+          'parent after',
+          'parent after test foo passed',
+          'parent before',
+          'parent before test bar',
+          'parent after',
+          'parent after test bar passed',
+          'parent before',
+          'parent before test one',
+          'before',
+          'before test one',
+          'one',
+          'after',
+          'after test one passed',
+          'parent after',
+          'parent after test one passed',
+          'parent before',
+          'parent before test two',
+          'before',
+          'before test two'
+        ]);
         calls.push('two');
       });
 
-      afterEach(function(){
+      afterEach(function () {
         calls.push('after');
         if (this.currentTest) {
           calls.push('after test ' + this.currentTest.title + ' ' + this.currentTest.state);
         }
-      })
-    })
-  })
-})
+      });
+    });
+  });
+});
diff --git a/test/hook-sync.spec.js b/test/hook-sync.spec.js
index 1d40f5d0c0..b1138a6db8 100644
--- a/test/hook-sync.spec.js
+++ b/test/hook-sync.spec.js
@@ -1,97 +1,103 @@
-describe('serial', function(){
+'use strict';
+
+describe('serial', function () {
   var calls = [];
 
-  beforeEach(function(){
+  beforeEach(function () {
     calls.push('parent before');
-  })
+  });
 
-  afterEach(function(){
+  afterEach(function () {
     calls.push('parent after');
-  })
+  });
 
-  describe('hooks', function(){
-    beforeEach(function(){
+  describe('hooks', function () {
+    beforeEach(function () {
       calls.push('before');
       if (this.currentTest) {
         calls.push('before test ' + this.currentTest.title);
       }
-    })
+    });
 
-    it('one', function(){
+    it('one', function () {
       calls.should.eql([
-          'parent before'
-        , 'before'
-        , 'before test one']);
+        'parent before',
+        'before',
+        'before test one'
+      ]);
       calls.push('one');
-    })
+    });
 
-    it('two', function(){
+    it('two', function () {
       calls.should.eql([
-          'parent before'
-        , 'before'
-        , 'before test one'
-        , 'one'
-        , 'after'
-        , 'after test one passed'
-        , 'parent after'
-        , 'parent before'
-        , 'before'
-        , 'before test two']);
+        'parent before',
+        'before',
+        'before test one',
+        'one',
+        'after',
+        'after test one passed',
+        'parent after',
+        'parent before',
+        'before',
+        'before test two'
+      ]);
       calls.push('two');
-    })
+    });
 
-    it('three', function(){
+    it('three', function () {
       calls.should.eql([
-          'parent before'
-        , 'before'
-        , 'before test one'
-        , 'one'
-        , 'after'
-        , 'after test one passed'
-        , 'parent after'
-        , 'parent before'
-        , 'before'
-        , 'before test two'
-        , 'two'
-        , 'after'
-        , 'after test two passed'
-        , 'parent after'
-        , 'parent before'
-        , 'before'
-        , 'before test three']);
+        'parent before',
+        'before',
+        'before test one',
+        'one',
+        'after',
+        'after test one passed',
+        'parent after',
+        'parent before',
+        'before',
+        'before test two',
+        'two',
+        'after',
+        'after test two passed',
+        'parent after',
+        'parent before',
+        'before',
+        'before test three'
+      ]);
       calls.push('three');
-    })
+    });
 
-    afterEach(function(){
+    afterEach(function () {
       calls.push('after');
       if (this.currentTest) {
         calls.push('after test ' + this.currentTest.title + ' ' + this.currentTest.state);
       }
-    })
+    });
 
-    after(function(){
+    after(function () {
       calls.should.eql([
-          'parent before'
-        , 'before'
-        , 'before test one'
-        , 'one'
-        , 'after'
-        , 'after test one passed'
-        , 'parent after'
-        , 'parent before'
-        , 'before'
-        , 'before test two'
-        , 'two'
-        , 'after'
-        , 'after test two passed'
-        , 'parent after'
-        , 'parent before'
-        , 'before'
-        , 'before test three'
-        , 'three'
-        , 'after'
-        , 'after test three passed'
-        , 'parent after']);
-    })
-  })
-})
+        'parent before',
+        'before',
+        'before test one',
+        'one',
+        'after',
+        'after test one passed',
+        'parent after',
+        'parent before',
+        'before',
+        'before test two',
+        'two',
+        'after',
+        'after test two passed',
+        'parent after',
+        'parent before',
+        'before',
+        'before test three',
+        'three',
+        'after',
+        'after test three passed',
+        'parent after'
+      ]);
+    });
+  });
+});
diff --git a/test/hook-timeout.spec.js b/test/hook-timeout.spec.js
index 155c1e95a6..c16c3011fb 100644
--- a/test/hook-timeout.spec.js
+++ b/test/hook-timeout.spec.js
@@ -1,8 +1,10 @@
-before(function(done){
+'use strict';
+
+before(function (done) {
   this.timeout(100);
   setTimeout(done, 50);
-})
+});
 
-it('should work', function(done) {
+it('should work', function (done) {
   done();
 });
diff --git a/test/http-meta-2.spec.js b/test/http-meta-2.spec.js
index fe9662b2e6..4530969041 100644
--- a/test/http-meta-2.spec.js
+++ b/test/http-meta-2.spec.js
@@ -1,10 +1,12 @@
+'use strict';
+
 var http = require('http');
 
 var PORT = 8899;
 
-var server = http.createServer(function(req, res){
-  var accept = req.headers.accept || ''
-    , json = ~accept.indexOf('json');
+var server = http.createServer(function (req, res) {
+  var accept = req.headers.accept || '';
+  var json = ~accept.indexOf('json');
 
   switch (req.url) {
     case '/':
@@ -18,43 +20,43 @@ var server = http.createServer(function(req, res){
       }
       break;
   }
-})
+});
 
-function get(url) {
-  var fields
-    , expected
-    , header = {};
+function get (url) {
+  var fields;
+  var expected;
+  var header = {};
 
-  function request(done) {
-    http.get({ path: url, port: PORT, headers: header }, function(res){
+  function request (done) {
+    http.get({ path: url, port: PORT, headers: header }, function (res) {
       var buf = '';
       res.should.have.property('statusCode', 200);
       res.setEncoding('utf8');
-      res.on('data', function(chunk){ buf += chunk });
-      res.on('end', function(){
+      res.on('data', function (chunk) { buf += chunk; });
+      res.on('end', function () {
         buf.should.equal(expected);
         done();
       });
-    })
+    });
   }
 
   return {
-    set: function(field, val){
+    set: function (field, val) {
       header[field] = val;
       return this;
     },
 
     should: {
-      respond: function(body){
-        fields = Object.keys(header).map(function(field){
+      respond: function (body) {
+        fields = Object.keys(header).map(function (field) {
           return field + ': ' + header[field];
         }).join(', ');
 
         expected = body;
-        describe('GET ' + url, function(){
+        describe('GET ' + url, function () {
           this.timeout(500);
           if (fields) {
-            describe('when given ' + fields, function(){
+            describe('when given ' + fields, function () {
               it('should respond with "' + body + '"', request);
             });
           } else {
@@ -66,26 +68,25 @@ function get(url) {
   };
 }
 
-describe('http server', function(){
-
-  before(function(done) {
+describe('http server', function () {
+  before(function (done) {
     server.listen(PORT, done);
   });
 
-  after(function() {
+  after(function () {
     server.close();
   });
 
   get('/')
     .should
-    .respond('hello')
+    .respond('hello');
 
   get('/users')
     .should
-    .respond('tobi, loki, jane')
+    .respond('tobi, loki, jane');
 
   get('/users')
     .set('Accept', 'application/json')
     .should
-    .respond('["tobi","loki","jane"]')
-})
+    .respond('["tobi","loki","jane"]');
+});
diff --git a/test/http-meta.spec.js b/test/http-meta.spec.js
index 5d1fb6750b..c92dbd2307 100644
--- a/test/http-meta.spec.js
+++ b/test/http-meta.spec.js
@@ -1,10 +1,12 @@
+'use strict';
+
 var http = require('http');
 
 var PORT = 8889;
 
-var server = http.createServer(function(req, res){
-  var accept = req.headers.accept || ''
-    , json = ~accept.indexOf('json');
+var server = http.createServer(function (req, res) {
+  var accept = req.headers.accept || '';
+  var json = ~accept.indexOf('json');
 
   switch (req.url) {
     case '/':
@@ -20,42 +22,44 @@ var server = http.createServer(function(req, res){
   }
 });
 
-
-function get(url, body, header) {
-  return function(done){
-    http.get({ path: url, port: PORT, headers: header || {}}, function(res){
+function get (url, body, header) {
+  return function (done) {
+    http.get({
+      path: url,
+      port: PORT,
+      headers: header || {}
+    }, function (res) {
       var buf = '';
       res.should.have.property('statusCode', 200);
       res.setEncoding('utf8');
-      res.on('data', function(chunk){ buf += chunk });
-      res.on('end', function(){
+      res.on('data', function (chunk) { buf += chunk; });
+      res.on('end', function () {
         buf.should.equal(body);
         done();
       });
-    })
-  }
+    });
+  };
 }
 
 describe('http requests', function () {
-
-  before(function(done) {
+  before(function (done) {
     server.listen(PORT, done);
   });
 
-  after(function() {
+  after(function () {
     server.close();
   });
 
   describe('GET /', function () {
     it('should respond with hello',
-      get('/', 'hello'))
-  })
+      get('/', 'hello'));
+  });
 
-  describe('GET /users', function(){
+  describe('GET /users', function () {
     it('should respond with users',
-      get('/users', 'tobi, loki, jane'))
+      get('/users', 'tobi, loki, jane'));
 
     it('should respond with users',
-      get('/users', '["tobi","loki","jane"]', { Accept: 'application/json' }))
-  })
-})
+      get('/users', '["tobi","loki","jane"]', { Accept: 'application/json' }));
+  });
+});
diff --git a/test/integration/diffs.spec.js b/test/integration/diffs.spec.js
index b779b84ada..7d620e7489 100644
--- a/test/integration/diffs.spec.js
+++ b/test/integration/diffs.spec.js
@@ -1,23 +1,25 @@
-var assert   = require('assert');
-var helpers  = require('./helpers');
-var run      = helpers.runMocha;
-var fs       = require('fs');
+'use strict';
+
+var assert = require('assert');
+var helpers = require('./helpers');
+var run = helpers.runMocha;
+var fs = require('fs');
 var getDiffs = helpers.getDiffs;
 
-function getExpectedOutput() {
+function getExpectedOutput () {
   var output = fs.readFileSync('test/integration/fixtures/diffs/output', 'UTF8');
 
   // Diffs are delimited in file by "// DIFF"
-  return output.split(/\s*\/\/ DIFF/).slice(1).map(function(diff) {
+  return output.split(/\s*\/\/ DIFF/).slice(1).map(function (diff) {
     return diff.split('\n').filter(Boolean).join('\n');
   });
 }
 
-describe('diffs', function() {
+describe('diffs', function () {
   var diffs, expected;
 
-  before(function(done) {
-    run('diffs/diffs.fixture.js', ['-C'], function(err, res) {
+  before(function (done) {
+    run('diffs/diffs.fixture.js', ['-C'], function (err, res) {
       expected = getExpectedOutput();
       diffs = getDiffs(res.output);
       done(err);
@@ -36,8 +38,8 @@ describe('diffs', function() {
     'should work with objects',
     'should show value diffs and not be affected by commas',
     'should display diff by data and not like an objects'
-  ].forEach(function(title, i) {
-    it(title, function() {
+  ].forEach(function (title, i) {
+    it(title, function () {
       assert.equal(diffs[i], expected[i]);
     });
   });
diff --git a/test/integration/fixtures/cascade.fixture.js b/test/integration/fixtures/cascade.fixture.js
index 10b1c37ffd..259c81af2d 100644
--- a/test/integration/fixtures/cascade.fixture.js
+++ b/test/integration/fixtures/cascade.fixture.js
@@ -1,55 +1,57 @@
-describe('one', function() {
-  before(function() {
+'use strict';
+
+describe('one', function () {
+  before(function () {
     console.log('before one');
   });
 
-  after(function() {
+  after(function () {
     console.log('after one');
   });
 
-  beforeEach(function() {
+  beforeEach(function () {
     console.log('  before each one');
   });
 
-  afterEach(function() {
+  afterEach(function () {
     console.log('  after each one');
   });
 
-  describe('two', function() {
-    before(function() {
+  describe('two', function () {
+    before(function () {
       console.log('  before two');
     });
 
-    after(function() {
+    after(function () {
       console.log('  after two');
     });
 
-    beforeEach(function() {
+    beforeEach(function () {
       console.log('    before each two');
     });
 
-    afterEach(function() {
+    afterEach(function () {
       console.log('    after each two');
     });
 
-    describe('three', function() {
-      before(function() {
+    describe('three', function () {
+      before(function () {
         console.log('    before three');
       });
 
-      after(function() {
+      after(function () {
         console.log('    after three');
       });
 
-      beforeEach(function() {
+      beforeEach(function () {
         console.log('    before each three');
       });
 
-      afterEach(function() {
+      afterEach(function () {
         console.log('    after each three');
       });
 
-      it('should three', function() {
+      it('should three', function () {
         console.log('      TEST three');
       });
     });
diff --git a/test/integration/fixtures/diffs/diffs.fixture.js b/test/integration/fixtures/diffs/diffs.fixture.js
index cf538fd777..50ea00bee0 100644
--- a/test/integration/fixtures/diffs/diffs.fixture.js
+++ b/test/integration/fixtures/diffs/diffs.fixture.js
@@ -1,58 +1,87 @@
-var fs     = require('fs');
-var assert = require('assert');
-var cssin  = fs.readFileSync('test/integration/fixtures/diffs/diffs.css.in', 'ascii');
+'use strict';
+
+var fs = require('fs');
+var cssin = fs.readFileSync('test/integration/fixtures/diffs/diffs.css.in', 'ascii');
 var cssout = fs.readFileSync('test/integration/fixtures/diffs/diffs.css.out', 'ascii');
 
-describe('diffs', function() {
+describe('diffs', function () {
   var actual, expected;
 
-  it('should display a diff for small strings', function() {
+  it('should display a diff for small strings', function () {
     actual = 'foo rar baz';
     expected = 'foo bar baz';
     actual.should.equal(expected);
   });
 
-  it('should display a diff of canonicalized objects', function() {
+  it('should display a diff of canonicalized objects', function () {
     actual = { name: 'travis j', age: 23 };
     expected = { age: 23, name: 'travis' };
     actual.should.equal(expected);
   });
 
-  it('should display a diff for medium strings', function() {
+  it('should display a diff for medium strings', function () {
     actual = 'foo bar baz\nfoo rar baz\nfoo bar raz';
     expected = 'foo bar baz\nfoo bar baz\nfoo bar baz';
     actual.should.equal(expected);
   });
 
-  it('should display a diff for entire object dumps', function() {
-    actual   = { name: 'joel', age: 30, address: {city: 'new york', country: 'usa' }};
-    expected = { name: 'joe',  age: 30, address: {city: 'new york', country: 'us'  }};
+  it('should display a diff for entire object dumps', function () {
+    actual = {
+      name: 'joel',
+      age: 30,
+      address: {
+        city: 'new york',
+        country: 'usa'
+      }
+    };
+    expected = {
+      name: 'joe',
+      age: 30,
+      address: {
+        city: 'new york',
+        country: 'us'
+      }
+    };
     actual.should.equal(expected);
   });
 
-  it('should display a diff for multi-line strings', function() {
-    actual   = 'one two three\nfour zzzz six\nseven eight nine';
+  it('should display a diff for multi-line strings', function () {
+    actual = 'one two three\nfour zzzz six\nseven eight nine';
     expected = 'one two three\nfour five six\nseven eight nine';
     actual.should.equal(expected);
   });
 
-  it('should display a diff for entire object dumps', function() {
-    actual   = { name: 'joel', age: 30, address: {city: 'new york', country: 'usa' }};
-    expected = { name: 'joe',  age: 30, address: {city: 'new york', country: 'us'  }}
+  it('should display a diff for entire object dumps', function () {
+    actual = {
+      name: 'joel',
+      age: 30,
+      address: {
+        city: 'new york',
+        country: 'usa'
+      }
+    };
+    expected = {
+      name: 'joe',
+      age: 30,
+      address: {
+        city: 'new york',
+        country: 'us'
+      }
+    };
     actual.should.equal(expected);
   });
 
-  it('should display a full-comparison with escaped special characters', function() {
-    actual   = 'one\ttab\ntwo\t\t\ttabs';
+  it('should display a full-comparison with escaped special characters', function () {
+    actual = 'one\ttab\ntwo\t\t\ttabs';
     expected = 'one\ttab\ntwo\t\ttabs';
     actual.should.equal(expected);
   });
 
-  it('should display a word diff for large strings', function() {
+  it('should display a word diff for large strings', function () {
     cssin.should.equal(cssout);
   });
 
-  it('should work with objects', function() {
+  it('should work with objects', function () {
     actual = {
       name: 'tobi',
       species: 'ferret',
@@ -70,13 +99,13 @@ describe('diffs', function() {
     actual.should.eql(expected);
   });
 
-  it('should show value diffs and not be affected by commas', function() {
+  it('should show value diffs and not be affected by commas', function () {
     actual = { a: 123 };
     expected = { a: 123, b: 456 };
     actual.should.equal(expected);
   });
 
-  it('should display diff by data and not like an objects', function() {
+  it('should display diff by data and not like an objects', function () {
     actual = new Buffer([0x01]);
     expected = new Buffer([0x02]);
     actual.should.equal(expected);
diff --git a/test/integration/fixtures/hooks/after-hook-async-error.fixture.js b/test/integration/fixtures/hooks/after-hook-async-error.fixture.js
index dc55537a60..f3dfe7e1ae 100644
--- a/test/integration/fixtures/hooks/after-hook-async-error.fixture.js
+++ b/test/integration/fixtures/hooks/after-hook-async-error.fixture.js
@@ -1,3 +1,5 @@
+'use strict';
+
 describe('spec 1', function () {
   after(function (done) {
     console.log('after');
diff --git a/test/integration/fixtures/hooks/after-hook-error.fixture.js b/test/integration/fixtures/hooks/after-hook-error.fixture.js
index e84856e433..7fc258f46d 100644
--- a/test/integration/fixtures/hooks/after-hook-error.fixture.js
+++ b/test/integration/fixtures/hooks/after-hook-error.fixture.js
@@ -1,3 +1,5 @@
+'use strict';
+
 describe('spec 1', function () {
   after(function () {
     console.log('after');
diff --git a/test/integration/fixtures/hooks/afterEach-hook-async-error.fixture.js b/test/integration/fixtures/hooks/afterEach-hook-async-error.fixture.js
index d4f4c9bdd9..442ad9321f 100644
--- a/test/integration/fixtures/hooks/afterEach-hook-async-error.fixture.js
+++ b/test/integration/fixtures/hooks/afterEach-hook-async-error.fixture.js
@@ -1,3 +1,5 @@
+'use strict';
+
 describe('spec 1', function () {
   afterEach(function (done) {
     console.log('after');
diff --git a/test/integration/fixtures/hooks/afterEach-hook-error.fixture.js b/test/integration/fixtures/hooks/afterEach-hook-error.fixture.js
index 9d28632fa3..5fb9a36c8d 100644
--- a/test/integration/fixtures/hooks/afterEach-hook-error.fixture.js
+++ b/test/integration/fixtures/hooks/afterEach-hook-error.fixture.js
@@ -1,3 +1,5 @@
+'use strict';
+
 describe('spec 1', function () {
   afterEach(function () {
     console.log('after');
diff --git a/test/integration/fixtures/hooks/before-hook-async-error-tip.fixture.js b/test/integration/fixtures/hooks/before-hook-async-error-tip.fixture.js
index 14e114e959..04801c1946 100644
--- a/test/integration/fixtures/hooks/before-hook-async-error-tip.fixture.js
+++ b/test/integration/fixtures/hooks/before-hook-async-error-tip.fixture.js
@@ -1,8 +1,10 @@
-describe('spec 1', function() {
-  it('should not blame me', function() { });
+'use strict';
+
+describe('spec 1', function () {
+  it('should not blame me', function () { });
 });
-describe('spec 2', function() {
-  before(function(done) {
+describe('spec 2', function () {
+  before(function (done) {
     process.nextTick(function () {
       throw new Error('before hook error');
     });
diff --git a/test/integration/fixtures/hooks/before-hook-async-error.fixture.js b/test/integration/fixtures/hooks/before-hook-async-error.fixture.js
index 10ea95156b..2530eec783 100644
--- a/test/integration/fixtures/hooks/before-hook-async-error.fixture.js
+++ b/test/integration/fixtures/hooks/before-hook-async-error.fixture.js
@@ -1,3 +1,5 @@
+'use strict';
+
 describe('spec 1', function () {
   before(function (done) {
     console.log('before');
diff --git a/test/integration/fixtures/hooks/before-hook-error-tip.fixture.js b/test/integration/fixtures/hooks/before-hook-error-tip.fixture.js
index 567dfef26b..64df731573 100644
--- a/test/integration/fixtures/hooks/before-hook-error-tip.fixture.js
+++ b/test/integration/fixtures/hooks/before-hook-error-tip.fixture.js
@@ -1,8 +1,10 @@
-describe('spec 1', function() {
-  it('should not blame me', function() { });
+'use strict';
+
+describe('spec 1', function () {
+  it('should not blame me', function () { });
 });
-describe('spec 2', function() {
-  before(function() {
+describe('spec 2', function () {
+  before(function () {
     throw new Error('before hook error');
   });
   it('skipped');
diff --git a/test/integration/fixtures/hooks/before-hook-error.fixture.js b/test/integration/fixtures/hooks/before-hook-error.fixture.js
index b3d6ea6640..547e54a243 100644
--- a/test/integration/fixtures/hooks/before-hook-error.fixture.js
+++ b/test/integration/fixtures/hooks/before-hook-error.fixture.js
@@ -1,3 +1,5 @@
+'use strict';
+
 describe('spec 1', function () {
   before(function () {
     console.log('before');
diff --git a/test/integration/fixtures/hooks/beforeEach-hook-async-error.fixture.js b/test/integration/fixtures/hooks/beforeEach-hook-async-error.fixture.js
index a34ed755e2..6ce27784a6 100644
--- a/test/integration/fixtures/hooks/beforeEach-hook-async-error.fixture.js
+++ b/test/integration/fixtures/hooks/beforeEach-hook-async-error.fixture.js
@@ -1,3 +1,5 @@
+'use strict';
+
 describe('spec 1', function () {
   beforeEach(function (done) {
     console.log('before');
diff --git a/test/integration/fixtures/hooks/beforeEach-hook-error.fixture.js b/test/integration/fixtures/hooks/beforeEach-hook-error.fixture.js
index bd84e8fe74..4c0ab2f237 100644
--- a/test/integration/fixtures/hooks/beforeEach-hook-error.fixture.js
+++ b/test/integration/fixtures/hooks/beforeEach-hook-error.fixture.js
@@ -1,3 +1,5 @@
+'use strict';
+
 describe('spec 1', function () {
   beforeEach(function () {
     console.log('before');
diff --git a/test/integration/fixtures/hooks/multiple-hook-async-error.fixture.js b/test/integration/fixtures/hooks/multiple-hook-async-error.fixture.js
index 93ace7ff0d..858bbb3c5e 100644
--- a/test/integration/fixtures/hooks/multiple-hook-async-error.fixture.js
+++ b/test/integration/fixtures/hooks/multiple-hook-async-error.fixture.js
@@ -1,3 +1,5 @@
+'use strict';
+
 before(function () {
   console.log('root before');
 });
diff --git a/test/integration/fixtures/hooks/multiple-hook-error.fixture.js b/test/integration/fixtures/hooks/multiple-hook-error.fixture.js
index 53d167b1cf..085978ef79 100644
--- a/test/integration/fixtures/hooks/multiple-hook-error.fixture.js
+++ b/test/integration/fixtures/hooks/multiple-hook-error.fixture.js
@@ -1,3 +1,5 @@
+'use strict';
+
 before(function () {
   console.log('root before');
 });
diff --git a/test/integration/fixtures/multiple-done-before.fixture.js b/test/integration/fixtures/multiple-done-before.fixture.js
index 80d4adb61a..1e1bc71a16 100644
--- a/test/integration/fixtures/multiple-done-before.fixture.js
+++ b/test/integration/fixtures/multiple-done-before.fixture.js
@@ -1,10 +1,12 @@
-describe('suite', function() {
-  before(function(done) {
+'use strict';
+
+describe('suite', function () {
+  before(function (done) {
     setTimeout(done, 10);
     setTimeout(done, 30);
   });
 
-  it('test1', function(done) {
+  it('test1', function (done) {
     setTimeout(done, 50);
   });
 });
diff --git a/test/integration/fixtures/multiple-done-beforeEach.fixture.js b/test/integration/fixtures/multiple-done-beforeEach.fixture.js
index 9b4724dea1..32de2bf442 100644
--- a/test/integration/fixtures/multiple-done-beforeEach.fixture.js
+++ b/test/integration/fixtures/multiple-done-beforeEach.fixture.js
@@ -1,14 +1,16 @@
-describe('suite', function() {
-  beforeEach(function(done) {
+'use strict';
+
+describe('suite', function () {
+  beforeEach(function (done) {
     setTimeout(done, 10);
     setTimeout(done, 20);
   });
 
-  it('test1', function(done) {
+  it('test1', function (done) {
     setTimeout(done, 50);
   });
 
-  it('test2', function(done) {
+  it('test2', function (done) {
     setTimeout(done, 50);
   });
 });
diff --git a/test/integration/fixtures/multiple-done-specs.fixture.js b/test/integration/fixtures/multiple-done-specs.fixture.js
index 82197061f1..a8ae6d1ac4 100644
--- a/test/integration/fixtures/multiple-done-specs.fixture.js
+++ b/test/integration/fixtures/multiple-done-specs.fixture.js
@@ -1,10 +1,12 @@
-describe('suite', function() {
-  it('test1', function(done) {
+'use strict';
+
+describe('suite', function () {
+  it('test1', function (done) {
     done();
     setTimeout(done, 10);
   });
 
-  it('test2', function(done) {
+  it('test2', function (done) {
     setTimeout(done, 20);
   });
 });
diff --git a/test/integration/fixtures/multiple-done.fixture.js b/test/integration/fixtures/multiple-done.fixture.js
index 63a704061c..f1b471c678 100644
--- a/test/integration/fixtures/multiple-done.fixture.js
+++ b/test/integration/fixtures/multiple-done.fixture.js
@@ -1,3 +1,5 @@
+'use strict';
+
 // The suite below should result in an additional error, but does
 // not. Uncomment once this bug is resolved.
 
@@ -10,8 +12,8 @@
 //   it('test', function() {});
 // });
 
-it('should fail in a test-case', function(done) {
-  process.nextTick(function(){
+it('should fail in a test-case', function (done) {
+  process.nextTick(function () {
     done();
     done();
   });
diff --git a/test/integration/fixtures/options/async-only-async.fixture.js b/test/integration/fixtures/options/async-only-async.fixture.js
index 5387d169b7..d5ba2b37a0 100644
--- a/test/integration/fixtures/options/async-only-async.fixture.js
+++ b/test/integration/fixtures/options/async-only-async.fixture.js
@@ -1,3 +1,5 @@
-it('should pass', function(done){
+'use strict';
+
+it('should pass', function (done) {
   done();
 });
diff --git a/test/integration/fixtures/options/async-only-sync.fixture.js b/test/integration/fixtures/options/async-only-sync.fixture.js
index d0dd9fa828..512fd0e4db 100644
--- a/test/integration/fixtures/options/async-only-sync.fixture.js
+++ b/test/integration/fixtures/options/async-only-sync.fixture.js
@@ -1 +1,3 @@
-it('throws an error', function() {});
+'use strict';
+
+it('throws an error', function () {});
diff --git a/test/integration/fixtures/options/bail.fixture.js b/test/integration/fixtures/options/bail.fixture.js
index 32d17e9aa8..5095e63158 100644
--- a/test/integration/fixtures/options/bail.fixture.js
+++ b/test/integration/fixtures/options/bail.fixture.js
@@ -1,21 +1,23 @@
-describe('suite1', function() {
-  it('should display this spec', function() {});
+'use strict';
 
-  it('should only display this error', function(done) {
+describe('suite1', function () {
+  it('should display this spec', function () {});
+
+  it('should only display this error', function (done) {
     throw new Error('this should be displayed');
   });
 
-  it('should not display this error', function(done) {
+  it('should not display this error', function (done) {
     throw new Error('this should not be displayed');
   });
 });
 
-describe('suite2', function() {
-  before(function(done) {
+describe('suite2', function () {
+  before(function (done) {
     throw new Error('this hook should not be displayed');
   });
 
-  it('should not display this error', function(done) {
+  it('should not display this error', function (done) {
     throw new Error('this should not be displayed');
   });
 });
diff --git a/test/integration/fixtures/options/delay-fail.fixture.js b/test/integration/fixtures/options/delay-fail.fixture.js
index 1475c918d4..644cbc0281 100644
--- a/test/integration/fixtures/options/delay-fail.fixture.js
+++ b/test/integration/fixtures/options/delay-fail.fixture.js
@@ -1,5 +1,8 @@
-setTimeout(function() {
+'use strict';
+
+setTimeout(function () {
   throw new Error('oops');
-  it('test', function() {});
+  /* eslint no-unreachable: off */
+  it('test', function () {});
   run();
 }, 100);
diff --git a/test/integration/fixtures/options/delay.fixture.js b/test/integration/fixtures/options/delay.fixture.js
index a8bf2d4112..b2d49217db 100644
--- a/test/integration/fixtures/options/delay.fixture.js
+++ b/test/integration/fixtures/options/delay.fixture.js
@@ -1,9 +1,11 @@
+'use strict';
+
 var assert = require('assert');
-var delay  = 500;
+var delay = 500;
 
-setTimeout(function() {
-  describe('delayed execution', function() {
-    it('should have no effect if attempted twice in the same suite', function() {
+setTimeout(function () {
+  describe('delayed execution', function () {
+    it('should have no effect if attempted twice in the same suite', function () {
       assert(true);
       run();
       assert(true);
diff --git a/test/integration/fixtures/options/grep.fixture.js b/test/integration/fixtures/options/grep.fixture.js
index 94785dc7db..0939d084ec 100644
--- a/test/integration/fixtures/options/grep.fixture.js
+++ b/test/integration/fixtures/options/grep.fixture.js
@@ -1,16 +1,18 @@
-describe('grep', function() {
-  describe('Match', function() {
-    it('should run', function(){});
-    it('should also run', function() {});
+'use strict';
+
+describe('grep', function () {
+  describe('Match', function () {
+    it('should run', function () {});
+    it('should also run', function () {});
   });
 
-  describe('match', function() {
-    it('should run', function(){});
-    it('should also run', function() {});
+  describe('match', function () {
+    it('should run', function () {});
+    it('should also run', function () {});
   });
 
-  describe('fail', function() {
-    it('should not be ran', function() {
+  describe('fail', function () {
+    it('should not be ran', function () {
       throw new Error('Spec should not run');
     });
   });
diff --git a/test/integration/fixtures/options/only/bdd.fixture.js b/test/integration/fixtures/options/only/bdd.fixture.js
index 783ce19b0b..39323f3567 100644
--- a/test/integration/fixtures/options/only/bdd.fixture.js
+++ b/test/integration/fixtures/options/only/bdd.fixture.js
@@ -1,70 +1,71 @@
-describe.only('should run this suite', function() {
-  it('should run this test', function() {});
+'use strict';
 
-  it('should run this test', function() {});
+describe.only('should run this suite', function () {
+  it('should run this test', function () {});
 
-  it('should run this test', function() {});
+  it('should run this test', function () {});
+
+  it('should run this test', function () {});
 });
 
-describe('should not run this suite', function() {
-  it('should not run this test', function() {
+describe('should not run this suite', function () {
+  it('should not run this test', function () {
     (true).should.equal(false);
   });
 
-  it('should not run this test', function() {
+  it('should not run this test', function () {
     (true).should.equal(false);
   });
 
-  it('should not run this test', function() {
+  it('should not run this test', function () {
     (true).should.equal(false);
   });
 });
 
-describe.only('should run this suite too', function() {
+describe.only('should run this suite too', function () {
   describe('should run this nested suite', function () {
-    it('should run this test', function() {});
+    it('should run this test', function () {});
 
-    it('should run this test', function() {});
+    it('should run this test', function () {});
 
-    it('should run this test', function() {});
+    it('should run this test', function () {});
   });
 });
 
-describe.only('should run this suite, even', function() {
+describe.only('should run this suite, even', function () {
   describe('should run this nested suite, even', function () {
     describe('should run this doubly-nested suite!', function () {
-      it('should run this test', function() {});
+      it('should run this test', function () {});
 
-      it('should run this test', function() {});
+      it('should run this test', function () {});
 
-      it('should run this test', function() {});
+      it('should run this test', function () {});
     });
   });
 });
 
-
-describe('should run this suite with an exclusive test', function() {
+describe('should run this suite with an exclusive test', function () {
   it.only('should run this test', function () {});
 
   describe('should not run this nested suite', function () {
     describe.only('should not run this doubly-nested suite', function () {
-      it('should not run this test', function() {});
+      it('should not run this test', function () {});
 
-      it('should not run this test', function() {});
+      it('should not run this test', function () {});
 
-      it('should not run this test', function() {});
+      it('should not run this test', function () {});
     });
   });
 });
 
-describe('should run this suite with an exclusive test (reverse order)', function() {
+describe('should run this suite with an exclusive test (reverse order)', function () {
   describe('should not run this nested suite', function () {
     describe.only('should not run this doubly-nested suite', function () {
-      it('should not run this test', function() {});
+      it('should not run this test', function () {});
 
-      it('should not run this test', function() {});
+      it('should not run this test', function () {});
 
-      it('should not run this test', function() {});
+      it('should not run this test', function () {});
     });
   });
   it.only('should run this test', function () {});
diff --git a/test/integration/fixtures/options/only/qunit.fixture.js b/test/integration/fixtures/options/only/qunit.fixture.js
index 9fa95f440b..8bc598030d 100644
--- a/test/integration/fixtures/options/only/qunit.fixture.js
+++ b/test/integration/fixtures/options/only/qunit.fixture.js
@@ -1,26 +1,27 @@
-suite.only('should run all tests in this suite');
+'use strict';
 
-test('should run this test #1', function() {});
+suite.only('should run all tests in this suite');
 
-test('should run this test #2', function() {});
+test('should run this test #1', function () {});
 
-test('should run this test #3', function() {});
+test('should run this test #2', function () {});
 
-test('should run this test #4', function() {});
+test('should run this test #3', function () {});
 
-test('should run this test #5', function() {});
+test('should run this test #4', function () {});
 
+test('should run this test #5', function () {});
 
 suite('should not run any of this suite\'s tests');
 
-test('should not run this test', function() {
+test('should not run this test', function () {
   (false).should.equal(true);
 });
 
-test('should not run this test', function() {
+test('should not run this test', function () {
   (false).should.equal(true);
 });
 
-test('should not run this test', function() {
+test('should not run this test', function () {
   (false).should.equal(true);
-});
\ No newline at end of file
+});
diff --git a/test/integration/fixtures/options/only/tdd.fixture.js b/test/integration/fixtures/options/only/tdd.fixture.js
index 129a9e5d74..987ee6bfba 100644
--- a/test/integration/fixtures/options/only/tdd.fixture.js
+++ b/test/integration/fixtures/options/only/tdd.fixture.js
@@ -1,35 +1,37 @@
-suite.only('should run all tests in this tdd suite', function() {
-  test('should run this test #1', function() {});
+'use strict';
 
-  test('should run this test #2', function() {});
+suite.only('should run all tests in this tdd suite', function () {
+  test('should run this test #1', function () {});
 
-  test('should run this test #3', function() {});
+  test('should run this test #2', function () {});
 
-  test('should run this test #4', function() {});
+  test('should run this test #3', function () {});
+
+  test('should run this test #4', function () {});
 });
 
-suite('should not run this suite', function() {
-  test('should not run this test', function() {
+suite('should not run this suite', function () {
+  test('should not run this test', function () {
     (true).should.equal(false);
   });
 
-  test('should not run this test', function() {
+  test('should not run this test', function () {
     (true).should.equal(false);
   });
 
-  test('should not run this test', function() {
+  test('should not run this test', function () {
     (true).should.equal(false);
   });
 });
 
-suite.only('should run this suite too', function() {
+suite.only('should run this suite too', function () {
   suite('should run this nested suite', function () {
-    test('should run this test', function() {});
+    test('should run this test', function () {});
 
-    test('should run this test', function() {});
+    test('should run this test', function () {});
 
-    test('should run this test', function() {});
+    test('should run this test', function () {});
 
-    test('should run this test', function() {});
+    test('should run this test', function () {});
   });
 });
diff --git a/test/integration/fixtures/options/retries.fixture.js b/test/integration/fixtures/options/retries.fixture.js
index b2f76e12ea..8d2b0a40b6 100644
--- a/test/integration/fixtures/options/retries.fixture.js
+++ b/test/integration/fixtures/options/retries.fixture.js
@@ -1,4 +1,6 @@
-describe('retries', function() {
+'use strict';
+
+describe('retries', function () {
   it('should fail', function () {
     throw new Error('retry failure');
   });
diff --git a/test/integration/fixtures/options/sort-alpha.fixture.js b/test/integration/fixtures/options/sort-alpha.fixture.js
index 7a5302994f..dd74303163 100644
--- a/test/integration/fixtures/options/sort-alpha.fixture.js
+++ b/test/integration/fixtures/options/sort-alpha.fixture.js
@@ -1,5 +1,7 @@
-describe('alpha', function(){
-  it('should be executed first', function(){
+'use strict';
+
+describe('alpha', function () {
+  it('should be executed first', function () {
     if (global.beta) {
       throw new Error('alpha was not executed first');
     }
diff --git a/test/integration/fixtures/options/sort-beta.fixture.js b/test/integration/fixtures/options/sort-beta.fixture.js
index 0951f49038..56da4a6523 100644
--- a/test/integration/fixtures/options/sort-beta.fixture.js
+++ b/test/integration/fixtures/options/sort-beta.fixture.js
@@ -1,5 +1,7 @@
-describe('beta', function(){
-  it('should be executed second', function(){
+'use strict';
+
+describe('beta', function () {
+  it('should be executed second', function () {
     global.beta = 1;
   });
 });
diff --git a/test/integration/fixtures/passing.fixture.js b/test/integration/fixtures/passing.fixture.js
index df91b3e501..baf142026d 100644
--- a/test/integration/fixtures/passing.fixture.js
+++ b/test/integration/fixtures/passing.fixture.js
@@ -1,11 +1,13 @@
+'use strict';
+
 var assert = require('assert');
 
-describe('suite', function() {
-  it('test1', function() {
+describe('suite', function () {
+  it('test1', function () {
     assert(true);
   });
 
-  it('test2', function() {
+  it('test2', function () {
     assert(true);
   });
 });
diff --git a/test/integration/fixtures/pending/skip-async-before.fixture.js b/test/integration/fixtures/pending/skip-async-before.fixture.js
index 114db36d88..efeaa93899 100644
--- a/test/integration/fixtures/pending/skip-async-before.fixture.js
+++ b/test/integration/fixtures/pending/skip-async-before.fixture.js
@@ -1,16 +1,18 @@
-describe('skip in before', function() {
-  before(function(done) {
+'use strict';
+
+describe('skip in before', function () {
+  before(function (done) {
     var self = this;
-    setTimeout(function() {
+    setTimeout(function () {
       self.skip();
     }, 50);
   });
 
-  it('should never run this test', function() {
+  it('should never run this test', function () {
     throw new Error('never thrown');
   });
 
-  it('should never run this test', function() {
+  it('should never run this test', function () {
     throw new Error('never thrown');
   });
 });
diff --git a/test/integration/fixtures/pending/skip-async-beforeEach.fixture.js b/test/integration/fixtures/pending/skip-async-beforeEach.fixture.js
index b8db22b94a..d6225564ba 100644
--- a/test/integration/fixtures/pending/skip-async-beforeEach.fixture.js
+++ b/test/integration/fixtures/pending/skip-async-beforeEach.fixture.js
@@ -1,16 +1,18 @@
-describe('skip in beforeEach', function() {
-  beforeEach(function(done) {
+'use strict';
+
+describe('skip in beforeEach', function () {
+  beforeEach(function (done) {
     var self = this;
-    setTimeout(function() {
+    setTimeout(function () {
       self.skip();
     }, 50);
   });
 
-  it('should never run this test', function() {
+  it('should never run this test', function () {
     throw new Error('never thrown');
   });
 
-  it('should never run this test', function() {
+  it('should never run this test', function () {
     throw new Error('never thrown');
   });
 });
diff --git a/test/integration/fixtures/pending/skip-async-spec.fixture.js b/test/integration/fixtures/pending/skip-async-spec.fixture.js
index 6096c59d2a..44707b026c 100644
--- a/test/integration/fixtures/pending/skip-async-spec.fixture.js
+++ b/test/integration/fixtures/pending/skip-async-spec.fixture.js
@@ -1,12 +1,14 @@
-describe('skip in test', function() {
-  it('should skip async', function(done) {
+'use strict';
+
+describe('skip in test', function () {
+  it('should skip async', function (done) {
     var self = this;
-    setTimeout(function() {
+    setTimeout(function () {
       self.skip();
     }, 50);
   });
 
-  it('should run other tests in the suite', function() {
+  it('should run other tests in the suite', function () {
     // Do nothing
   });
 });
diff --git a/test/integration/fixtures/pending/skip-sync-before.fixture.js b/test/integration/fixtures/pending/skip-sync-before.fixture.js
index 35152e27f4..5e3b208efa 100644
--- a/test/integration/fixtures/pending/skip-sync-before.fixture.js
+++ b/test/integration/fixtures/pending/skip-sync-before.fixture.js
@@ -1,13 +1,15 @@
-describe('skip in before', function() {
-  before(function() {
+'use strict';
+
+describe('skip in before', function () {
+  before(function () {
     this.skip();
   });
 
-  it('should never run this test', function() {
+  it('should never run this test', function () {
     throw new Error('never thrown');
   });
 
-  it('should never run this test', function() {
+  it('should never run this test', function () {
     throw new Error('never thrown');
   });
 });
diff --git a/test/integration/fixtures/pending/skip-sync-beforeEach.fixture.js b/test/integration/fixtures/pending/skip-sync-beforeEach.fixture.js
index 8d1c442ce2..0bd155ba55 100644
--- a/test/integration/fixtures/pending/skip-sync-beforeEach.fixture.js
+++ b/test/integration/fixtures/pending/skip-sync-beforeEach.fixture.js
@@ -1,13 +1,15 @@
-describe('skip in beforeEach', function() {
-  beforeEach(function() {
+'use strict';
+
+describe('skip in beforeEach', function () {
+  beforeEach(function () {
     this.skip();
   });
 
-  it('should never run this test', function() {
+  it('should never run this test', function () {
     throw new Error('never thrown');
   });
 
-  it('should never run this test', function() {
+  it('should never run this test', function () {
     throw new Error('never thrown');
   });
 });
diff --git a/test/integration/fixtures/pending/skip-sync-spec.fixture.js b/test/integration/fixtures/pending/skip-sync-spec.fixture.js
index e2bbb739b3..1d22f0b77d 100644
--- a/test/integration/fixtures/pending/skip-sync-spec.fixture.js
+++ b/test/integration/fixtures/pending/skip-sync-spec.fixture.js
@@ -1,10 +1,12 @@
-describe('skip in test', function() {
-  it('should skip immediately', function() {
+'use strict';
+
+describe('skip in test', function () {
+  it('should skip immediately', function () {
     this.skip();
     throw new Error('never thrown');
   });
 
-  it('should run other tests in the suite', function() {
+  it('should run other tests in the suite', function () {
     // Do nothing
   });
 });
diff --git a/test/integration/fixtures/pending/spec.fixture.js b/test/integration/fixtures/pending/spec.fixture.js
index 084dd33588..d750fcad1a 100644
--- a/test/integration/fixtures/pending/spec.fixture.js
+++ b/test/integration/fixtures/pending/spec.fixture.js
@@ -1,3 +1,5 @@
-describe('suite', function() {
+'use strict';
+
+describe('suite', function () {
   it('pending spec');
 });
diff --git a/test/integration/fixtures/regression/1794/issue-1794.fixture.js b/test/integration/fixtures/regression/1794/issue-1794.fixture.js
index 1a1637f30a..8867369546 100644
--- a/test/integration/fixtures/regression/1794/issue-1794.fixture.js
+++ b/test/integration/fixtures/regression/1794/issue-1794.fixture.js
@@ -1,3 +1,5 @@
-test('pass', function() {
+'use strict';
+
+test('pass', function () {
   // pass
 });
diff --git a/test/integration/fixtures/regression/1794/simple-ui.js b/test/integration/fixtures/regression/1794/simple-ui.js
index 1fdf33d665..5cfde0465f 100644
--- a/test/integration/fixtures/regression/1794/simple-ui.js
+++ b/test/integration/fixtures/regression/1794/simple-ui.js
@@ -1,13 +1,14 @@
-var path  = '../../../../../lib/',
-    Mocha = require(path + 'mocha');
-    Suite = require(path + 'suite'),
-    Test  = require(path + 'test');
+'use strict';
+
+var path = '../../../../../lib/';
+var Mocha = require(path + 'mocha');
+var Test = require(path + 'test');
 
 /**
  * A simple UI that only exposes a single function: test
  */
-module.exports = Mocha.interfaces['simple-ui'] = function(suite) {
-  suite.on('pre-require', function(context, file, mocha) {
+module.exports = Mocha.interfaces['simple-ui'] = function (suite) {
+  suite.on('pre-require', function (context, file, mocha) {
     var common = require(path + 'interfaces/common')([suite], context);
 
     context.run = mocha.options.delay && common.runWithSuite(suite);
@@ -16,7 +17,7 @@ module.exports = Mocha.interfaces['simple-ui'] = function(suite) {
      * Describes a specification or test-case with the given `title`
      * and callback `fn` acting as a thunk.
      */
-    context.test = function(title, fn) {
+    context.test = function (title, fn) {
       var test = new Test(title, fn);
       test.file = file;
       suite.addTest(test);
diff --git a/test/integration/fixtures/regression/issue-1327.fixture.js b/test/integration/fixtures/regression/issue-1327.fixture.js
index 43d5553762..e788278d6d 100644
--- a/test/integration/fixtures/regression/issue-1327.fixture.js
+++ b/test/integration/fixtures/regression/issue-1327.fixture.js
@@ -1,15 +1,17 @@
-it('test 1', function() {
+'use strict';
+
+it('test 1', function () {
   console.log('testbody1');
-  process.nextTick(function() {
-    throw 'Too bad';
+  process.nextTick(function () {
+    throw new Error('Too bad');
   });
 });
 
-it('test 2', function() {
+it('test 2', function () {
   console.log('testbody2');
 });
 
-it('test 3', function() {
+it('test 3', function () {
   console.log('testbody3');
   throw new Error('OUCH');
 });
diff --git a/test/integration/fixtures/regression/issue-1417.js b/test/integration/fixtures/regression/issue-1417.js
index fee75eaa09..13ce053784 100644
--- a/test/integration/fixtures/regression/issue-1417.js
+++ b/test/integration/fixtures/regression/issue-1417.js
@@ -5,16 +5,16 @@
  * It should not report misleading 'multiple calls to done()'.
  */
 
-it('fails exactly once when a global error is thrown synchronously and done errors', function(done) {
-  setTimeout(function() {
+it('fails exactly once when a global error is thrown synchronously and done errors', function (done) {
+  setTimeout(function () {
     done(new Error('test error'));
   }, 1); // Not 0 - it will 'succeed', but won't test the breaking condition
 
   throw new Error('sync error');
 });
 
-it('fails exactly once when a global error is thrown synchronously and done completes', function(done) {
-  setTimeout(function() {
+it('fails exactly once when a global error is thrown synchronously and done completes', function (done) {
+  setTimeout(function () {
     done();
   }, 1); // Not 0 - it will 'succeed', but won't test the breaking condition
 
diff --git a/test/integration/fixtures/regression/issue-1991.fixture.js b/test/integration/fixtures/regression/issue-1991.fixture.js
index 96860332a2..024f02519f 100644
--- a/test/integration/fixtures/regression/issue-1991.fixture.js
+++ b/test/integration/fixtures/regression/issue-1991.fixture.js
@@ -1,7 +1,11 @@
-function MemoryLeak() {
+'use strict';
+
+/* eslint no-unused-vars: off */
+
+function MemoryLeak () {
   this.myArr = [];
   for (var i = 0; i < 1000000; i++) {
-    this.myArr.push(i)
+    this.myArr.push(i);
   }
 }
 
@@ -13,7 +17,6 @@ for (var i = 0; i < numOfTests; i += 1) {
    * if all the deferred functions references have not been cleared
    */
   describe('Memory Leak Suite #' + i, function () {
-
     // The <closureVar> variable will be accessed by the test below.
     // As long as those test's functions are
     // referenced in memory, the closure variable may not be garbage collected
@@ -22,19 +25,19 @@ for (var i = 0; i < numOfTests; i += 1) {
     var closureVar;
 
     before(function () {
-      var x = closureVar ? 1 : 2
+      var x = closureVar ? 1 : 2;
     });
 
     after(function () {
-      var x = closureVar[0]
+      var x = closureVar[0];
     });
 
     beforeEach(function () {
-      var x = closureVar ? 1 : 2
+      var x = closureVar ? 1 : 2;
     });
 
     afterEach(function () {
-      var x = closureVar[0]
+      var x = closureVar[0];
     });
 
     it('access a variable via a closure', function () {
@@ -42,6 +45,5 @@ for (var i = 0; i < numOfTests; i += 1) {
       this.timeout(1000);
       closureVar = new MemoryLeak();
     });
-
   });
 }
diff --git a/test/integration/fixtures/regression/issue-2315.js b/test/integration/fixtures/regression/issue-2315.js
index cdfb201059..fe18841d1c 100644
--- a/test/integration/fixtures/regression/issue-2315.js
+++ b/test/integration/fixtures/regression/issue-2315.js
@@ -1,3 +1,5 @@
+'use strict';
+
 describe('issue-2315: cannot read property currentRetry of undefined', function () {
   before(function () {
     process.nextTick(function () {
diff --git a/test/integration/fixtures/regression/issue-2406.fixture.js b/test/integration/fixtures/regression/issue-2406.fixture.js
index c800228f1e..b3770014dd 100644
--- a/test/integration/fixtures/regression/issue-2406.fixture.js
+++ b/test/integration/fixtures/regression/issue-2406.fixture.js
@@ -1,15 +1,17 @@
-describe('outer describe', function() {
-  it('should not run this test', function() {});
-  describe('this suite should not run', function() {
-    it('should not run this test', function() {});
+'use strict';
+
+describe('outer describe', function () {
+  it('should not run this test', function () {});
+  describe('this suite should not run', function () {
+    it('should not run this test', function () {});
   });
-  describe.only('this .only suite should run', function() {
-    describe('this suite should run', function() {
-      it('should run this test in a nested suite', function() {});
+  describe.only('this .only suite should run', function () {
+    describe('this suite should run', function () {
+      it('should run this test in a nested suite', function () {});
     });
-    it('should run this test', function() {});
+    it('should run this test', function () {});
   });
-  describe('this suite should not run', function() {
-    it('should not run this test', function() {});
+  describe('this suite should not run', function () {
+    it('should not run this test', function () {});
   });
 });
diff --git a/test/integration/fixtures/regression/issue-2417.fixture.js b/test/integration/fixtures/regression/issue-2417.fixture.js
index e14aab09db..58f49cf846 100644
--- a/test/integration/fixtures/regression/issue-2417.fixture.js
+++ b/test/integration/fixtures/regression/issue-2417.fixture.js
@@ -1,6 +1,8 @@
-describe('outer describe', function() {
-  describe.only('outer describe.only', function() {
-    it.only('inner it.only', function() {
+'use strict';
+
+describe('outer describe', function () {
+  describe.only('outer describe.only', function () {
+    it.only('inner it.only', function () {
       // should run and exit without error
     });
   });
diff --git a/test/integration/fixtures/retries/async.fixture.js b/test/integration/fixtures/retries/async.fixture.js
index 0e917e52f3..56d067fc05 100644
--- a/test/integration/fixtures/retries/async.fixture.js
+++ b/test/integration/fixtures/retries/async.fixture.js
@@ -1,4 +1,6 @@
-describe('retries', function() {
+'use strict';
+
+describe('retries', function () {
   var times = 0;
   before(function () {
     console.log('before');
@@ -8,7 +10,7 @@ describe('retries', function() {
     console.log('after');
   });
 
-  beforeEach(function() {
+  beforeEach(function () {
     console.log('before each', times);
   });
 
diff --git a/test/integration/fixtures/retries/early-pass.fixture.js b/test/integration/fixtures/retries/early-pass.fixture.js
index 0010d120fa..ddad40399e 100644
--- a/test/integration/fixtures/retries/early-pass.fixture.js
+++ b/test/integration/fixtures/retries/early-pass.fixture.js
@@ -1,8 +1,10 @@
-describe('retries', function() {
+'use strict';
+
+describe('retries', function () {
   this.retries(1);
   var times = 0;
 
-  it('should pass after 1 retry', function() {
+  it('should pass after 1 retry', function () {
     times++;
     if (times !== 2) {
       throw new Error('retry error ' + times);
diff --git a/test/integration/fixtures/retries/hooks.fixture.js b/test/integration/fixtures/retries/hooks.fixture.js
index 47f6c6a1b7..b4fc081aaa 100644
--- a/test/integration/fixtures/retries/hooks.fixture.js
+++ b/test/integration/fixtures/retries/hooks.fixture.js
@@ -1,4 +1,6 @@
-describe('retries', function() {
+'use strict';
+
+describe('retries', function () {
   var times = 0;
   before(function () {
     console.log('before');
@@ -8,7 +10,7 @@ describe('retries', function() {
     console.log('after');
   });
 
-  beforeEach(function() {
+  beforeEach(function () {
     console.log('before each', times);
   });
 
@@ -16,7 +18,7 @@ describe('retries', function() {
     console.log('after each', times);
   });
 
-  it('should allow override and run appropriate hooks', function(){
+  it('should allow override and run appropriate hooks', function () {
     this.retries(4);
     console.log('TEST', times);
     times++;
diff --git a/test/integration/fixtures/retries/nested.fixture.js b/test/integration/fixtures/retries/nested.fixture.js
index 43c40cb236..877d519d7f 100644
--- a/test/integration/fixtures/retries/nested.fixture.js
+++ b/test/integration/fixtures/retries/nested.fixture.js
@@ -1,7 +1,9 @@
-describe('retries', function() {
+'use strict';
+
+describe('retries', function () {
   this.retries(3);
   describe('nested', function () {
-    it('should fail after only 1 retry', function(){
+    it('should fail after only 1 retry', function () {
       this.retries(1);
       throw new Error('retry error');
     });
diff --git a/test/integration/fixtures/suite/suite-no-callback.fixture.js b/test/integration/fixtures/suite/suite-no-callback.fixture.js
index de55b358a3..80d046438f 100644
--- a/test/integration/fixtures/suite/suite-no-callback.fixture.js
+++ b/test/integration/fixtures/suite/suite-no-callback.fixture.js
@@ -1 +1,3 @@
+'use strict';
+
 describe('a suite without a callback');
diff --git a/test/integration/fixtures/suite/suite-skipped-callback.fixture.js b/test/integration/fixtures/suite/suite-skipped-callback.fixture.js
index b30b67ee2e..6def25de7f 100644
--- a/test/integration/fixtures/suite/suite-skipped-callback.fixture.js
+++ b/test/integration/fixtures/suite/suite-skipped-callback.fixture.js
@@ -1 +1,3 @@
+'use strict';
+
 xdescribe('a pending suite with a callback', function () {});
diff --git a/test/integration/fixtures/suite/suite-skipped-no-callback.fixture.js b/test/integration/fixtures/suite/suite-skipped-no-callback.fixture.js
index c5bca84a47..e9381159bf 100644
--- a/test/integration/fixtures/suite/suite-skipped-no-callback.fixture.js
+++ b/test/integration/fixtures/suite/suite-skipped-no-callback.fixture.js
@@ -1 +1,3 @@
+'use strict';
+
 xdescribe('a pending suite without a callback');
diff --git a/test/integration/fixtures/timeout.fixture.js b/test/integration/fixtures/timeout.fixture.js
index d8c99b2bc3..d237436811 100644
--- a/test/integration/fixtures/timeout.fixture.js
+++ b/test/integration/fixtures/timeout.fixture.js
@@ -1,16 +1,18 @@
-describe('timeout', function(){
+'use strict';
+
+describe('timeout', function () {
   this.timeout(1);
 
-  it('should be honored with sync suites', function() {
+  it('should be honored with sync suites', function () {
     sleep(2);
   });
 
-  it('should be honored with async suites', function(done) {
+  it('should be honored with async suites', function (done) {
     sleep(2);
     done();
   });
 
-  function sleep(ms) {
+  function sleep (ms) {
     var start = Date.now();
     while (start + ms > Date.now());
   }
diff --git a/test/integration/fixtures/uncaught-hook.fixture.js b/test/integration/fixtures/uncaught-hook.fixture.js
index 9adcb3f726..54f30c56e9 100644
--- a/test/integration/fixtures/uncaught-hook.fixture.js
+++ b/test/integration/fixtures/uncaught-hook.fixture.js
@@ -1,15 +1,15 @@
-describe('uncaught', function() {
-  beforeEach(function(done) {
-    process.nextTick(function() {
+'use strict';
+
+describe('uncaught', function () {
+  beforeEach(function (done) {
+    process.nextTick(function () {
       throw new Error('oh noes');
-      done();
     });
   });
 
-  it('test', function(done) {
-    process.nextTick(function() {
+  it('test', function (done) {
+    process.nextTick(function () {
       throw new Error("I'm uncaught!");
-      done();
     });
   });
 });
diff --git a/test/integration/fixtures/uncaught.fixture.js b/test/integration/fixtures/uncaught.fixture.js
index 054d1d857b..6a2ded880c 100644
--- a/test/integration/fixtures/uncaught.fixture.js
+++ b/test/integration/fixtures/uncaught.fixture.js
@@ -5,22 +5,18 @@
  * Mocha is capable of detecting two distinct exceptions during test execution.
  */
 
-it('fails exactly once when a global error is thrown first', function(done) {
-  setTimeout(function() {
+it('fails exactly once when a global error is thrown first', function (done) {
+  setTimeout(function () {
     throw new Error('global error');
-
-    setTimeout(function() {
-      done(new Error('test error'));
-    }, 0);
   }, 0);
 });
 
-it('fails exactly once when a global error is thrown second', function(done) {
-  setTimeout(function() {
+it('fails exactly once when a global error is thrown second', function (done) {
+  setTimeout(function () {
     done(new Error('test error'));
   }, 0);
 
-  setTimeout(function() {
+  setTimeout(function () {
     throw new Error('global error');
   }, 0);
 });
diff --git a/test/integration/helpers.js b/test/integration/helpers.js
index 2720eb3bda..7f6a608a6f 100644
--- a/test/integration/helpers.js
+++ b/test/integration/helpers.js
@@ -1,5 +1,7 @@
+'use strict';
+
 var spawn = require('child_process').spawn;
-var path  = require('path');
+var path = require('path');
 var fs = require('fs');
 var baseReporter = require('../../lib/reporters/base');
 
@@ -24,13 +26,13 @@ module.exports = {
    * @param {array}    args
    * @param {function} fn
    */
-  runMocha: function(fixturePath, args, fn) {
+  runMocha: function (fixturePath, args, fn) {
     var path;
 
     path = resolveFixturePath(fixturePath);
     args = args || [];
 
-    invokeMocha(args.concat(['-C', path]), function(err, res) {
+    invokeMocha(args.concat(['-C', path]), function (err, res) {
       if (err) return fn(err);
 
       fn(null, getSummary(res));
@@ -57,19 +59,19 @@ module.exports = {
    * @param {array}    args
    * @param {function} fn
    */
-  runMochaFunction: function(fixture, args, fn) {
+  runMochaFunction: function (fixture, args, fn) {
     var path = resolveFixturePath(fixture.name + '.js' || 'tempfile.js');
     args = args || [];
 
     var fixtureContent = 'var fn = ' + fixture.toString() + '; fn()';
     fs.writeFileSync(path, fixtureContent, 'utf8');
 
-    function cleanup() {
+    function cleanup () {
       fs.unlink(path);
       fn.apply(this, arguments);
     }
 
-    invokeMocha(args.concat(['-C', path]), function(err, res) {
+    invokeMocha(args.concat(['-C', path]), function (err, res) {
       if (err) {
         return cleanup(err);
       }
@@ -86,13 +88,13 @@ module.exports = {
    * @param {array}    args
    * @param {function} fn
    */
-  runMochaJSON: function(fixturePath, args, fn) {
+  runMochaJSON: function (fixturePath, args, fn) {
     var path;
 
     path = resolveFixturePath(fixturePath);
     args = args || [];
 
-    invokeMocha(args.concat(['--reporter', 'json', path]), function(err, res) {
+    invokeMocha(args.concat(['--reporter', 'json', path]), function (err, res) {
       if (err) return fn(err);
 
       try {
@@ -113,12 +115,12 @@ module.exports = {
    * @param  {string}   output
    * returns {string[]}
    */
-  getDiffs: function(output) {
+  getDiffs: function (output) {
     var diffs, i, inDiff, inStackTrace;
 
     diffs = [];
-    output.split('\n').forEach(function(line) {
-      if (line.match(/^  \d+\)/)) {
+    output.split('\n').forEach(function (line) {
+      if (line.match(/^\s{2}\d+\)/)) {
         // New spec, e.g. "1) spec title"
         diffs.push([]);
         i = diffs.length - 1;
@@ -140,7 +142,7 @@ module.exports = {
     });
 
     // Ignore empty lines before/after diff
-    return diffs.map(function(diff) {
+    return diffs.map(function (diff) {
       return diff.slice(1, -3).join('\n');
     });
   },
@@ -151,14 +153,14 @@ module.exports = {
   splitRegExp: new RegExp('[\\n' + baseReporter.symbols.dot + ']+')
 };
 
-function invokeMocha(args, fn) {
+function invokeMocha (args, fn) {
   var output, mocha, listener;
 
   output = '';
   args = [path.join('bin', 'mocha')].concat(args);
   mocha = spawn(process.execPath, args);
 
-  listener = function(data) {
+  listener = function (data) {
     output += data;
   };
 
@@ -166,7 +168,7 @@ function invokeMocha(args, fn) {
   mocha.stderr.on('data', listener);
   mocha.on('error', fn);
 
-  mocha.on('close', function(code) {
+  mocha.on('close', function (code) {
     fn(null, {
       output: output.split('\n').join('\n'),
       code: code
@@ -174,12 +176,12 @@ function invokeMocha(args, fn) {
   });
 }
 
-function resolveFixturePath(fixture) {
+function resolveFixturePath (fixture) {
   return path.join('./test/integration/fixtures', fixture);
 }
 
-function getSummary(res) {
-  return ['passing', 'pending', 'failing'].reduce(function(summary, type) {
+function getSummary (res) {
+  return ['passing', 'pending', 'failing'].reduce(function (summary, type) {
     var pattern, match;
 
     pattern = new RegExp('  (\\d+) ' + type + '\\s');
diff --git a/test/integration/hook-err.spec.js b/test/integration/hook-err.spec.js
index be18721f31..fbdd7e8e38 100644
--- a/test/integration/hook-err.spec.js
+++ b/test/integration/hook-err.spec.js
@@ -1,14 +1,16 @@
+'use strict';
+
 var assert = require('assert');
 var runMocha = require('./helpers').runMocha;
 var splitRegExp = require('./helpers').splitRegExp;
 var bang = require('../../lib/reporters/base').symbols.bang;
 
-describe('hook error handling', function() {
+describe('hook error handling', function () {
   var lines;
 
-  describe('before hook error', function() {
+  describe('before hook error', function () {
     before(run('hooks/before-hook-error.fixture.js'));
-    it('should verify results', function() {
+    it('should verify results', function () {
       assert.deepEqual(
         lines,
         ['before', bang + 'test 3']
@@ -16,9 +18,9 @@ describe('hook error handling', function() {
     });
   });
 
-  describe('before hook error tip', function() {
+  describe('before hook error tip', function () {
     before(run('hooks/before-hook-error-tip.fixture.js', onlyErrorTitle));
-    it('should verify results', function() {
+    it('should verify results', function () {
       assert.deepEqual(
         lines,
         ['1) spec 2 "before all" hook:']
@@ -26,9 +28,9 @@ describe('hook error handling', function() {
     });
   });
 
-  describe('before each hook error', function() {
+  describe('before each hook error', function () {
     before(run('hooks/beforeEach-hook-error.fixture.js'));
-    it('should verify results', function() {
+    it('should verify results', function () {
       assert.deepEqual(
         lines,
         ['before', bang + 'test 3']
@@ -36,9 +38,9 @@ describe('hook error handling', function() {
     });
   });
 
-  describe('after hook error', function() {
+  describe('after hook error', function () {
     before(run('hooks/after-hook-error.fixture.js'));
-    it('should verify results', function() {
+    it('should verify results', function () {
       assert.deepEqual(
         lines,
         ['test 1', 'test 2', 'after', bang + 'test 3']
@@ -46,9 +48,9 @@ describe('hook error handling', function() {
     });
   });
 
-  describe('after each hook error', function() {
+  describe('after each hook error', function () {
     before(run('hooks/afterEach-hook-error.fixture.js'));
-    it('should verify results', function() {
+    it('should verify results', function () {
       assert.deepEqual(
         lines,
         ['test 1', 'after', bang + 'test 3']
@@ -56,9 +58,9 @@ describe('hook error handling', function() {
     });
   });
 
-  describe('multiple hook errors', function() {
+  describe('multiple hook errors', function () {
     before(run('hooks/multiple-hook-error.fixture.js'));
-    it('should verify results', function() {
+    it('should verify results', function () {
       assert.deepEqual(
         lines,
         [
@@ -94,9 +96,9 @@ describe('hook error handling', function() {
     });
   });
 
-  describe('async - before hook error', function() {
+  describe('async - before hook error', function () {
     before(run('hooks/before-hook-async-error.fixture.js'));
-    it('should verify results', function() {
+    it('should verify results', function () {
       assert.deepEqual(
         lines,
         ['before', bang + 'test 3']
@@ -104,9 +106,9 @@ describe('hook error handling', function() {
     });
   });
 
-  describe('async - before hook error tip', function() {
+  describe('async - before hook error tip', function () {
     before(run('hooks/before-hook-async-error-tip.fixture.js', onlyErrorTitle));
-    it('should verify results', function() {
+    it('should verify results', function () {
       assert.deepEqual(
         lines,
         ['1) spec 2 "before all" hook:']
@@ -114,9 +116,9 @@ describe('hook error handling', function() {
     });
   });
 
-  describe('async - before each hook error', function() {
+  describe('async - before each hook error', function () {
     before(run('hooks/beforeEach-hook-async-error.fixture.js'));
-    it('should verify results', function() {
+    it('should verify results', function () {
       assert.deepEqual(
         lines,
         ['before', bang + 'test 3']
@@ -124,9 +126,9 @@ describe('hook error handling', function() {
     });
   });
 
-  describe('async - after hook error', function() {
+  describe('async - after hook error', function () {
     before(run('hooks/after-hook-async-error.fixture.js'));
-    it('should verify results', function() {
+    it('should verify results', function () {
       assert.deepEqual(
         lines,
         ['test 1', 'test 2', 'after', bang + 'test 3']
@@ -134,9 +136,9 @@ describe('hook error handling', function() {
     });
   });
 
-  describe('async - after each hook error', function() {
+  describe('async - after each hook error', function () {
     before(run('hooks/afterEach-hook-async-error.fixture.js'));
-    it('should verify results', function() {
+    it('should verify results', function () {
       assert.deepEqual(
         lines,
         ['test 1', 'after', bang + 'test 3']
@@ -144,9 +146,9 @@ describe('hook error handling', function() {
     });
   });
 
-  describe('async - multiple hook errors', function() {
+  describe('async - multiple hook errors', function () {
     before(run('hooks/multiple-hook-async-error.fixture.js'));
-    it('should verify results', function() {
+    it('should verify results', function () {
       assert.deepEqual(
         lines,
         [
@@ -182,14 +184,14 @@ describe('hook error handling', function() {
     });
   });
 
-  function run(fnPath, outputFilter) {
-    return function(done) {
-      runMocha(fnPath, [], function(err, res) {
+  function run (fnPath, outputFilter) {
+    return function (done) {
+      runMocha(fnPath, [], function (err, res) {
         assert.ifError(err);
 
         lines = res.output
           .split(splitRegExp)
-          .map(function(line) {
+          .map(function (line) {
             return line.trim();
           })
           .filter(outputFilter || onlyConsoleOutput());
@@ -200,9 +202,9 @@ describe('hook error handling', function() {
   }
 });
 
-function onlyConsoleOutput() {
+function onlyConsoleOutput () {
   var foundSummary = false;
-  return function(line) {
+  return function (line) {
     if (!foundSummary) {
       foundSummary = !!(/\(\d+ms\)/).exec(line);
     }
@@ -210,6 +212,6 @@ function onlyConsoleOutput() {
   };
 }
 
-function onlyErrorTitle(line) {
+function onlyErrorTitle (line) {
   return !!(/^1\)/).exec(line);
 }
diff --git a/test/integration/hooks.spec.js b/test/integration/hooks.spec.js
index 7633cb5630..0d31cbfdf4 100644
--- a/test/integration/hooks.spec.js
+++ b/test/integration/hooks.spec.js
@@ -1,18 +1,20 @@
+'use strict';
+
 var assert = require('assert');
-var run    = require('./helpers').runMocha;
+var run = require('./helpers').runMocha;
 var splitRegExp = require('./helpers').splitRegExp;
-var args   = [];
+var args = [];
 
-describe('hooks', function() {
-  it('are ran in correct order', function(done) {
-    run('cascade.fixture.js', args, function(err, res) {
+describe('hooks', function () {
+  it('are ran in correct order', function (done) {
+    run('cascade.fixture.js', args, function (err, res) {
       var lines, expected;
 
       assert(!err);
 
-      lines = res.output.split(splitRegExp).map(function(line) {
+      lines = res.output.split(splitRegExp).map(function (line) {
         return line.trim();
-      }).filter(function(line) {
+      }).filter(function (line) {
         return line.length;
       }).slice(0, -1);
 
@@ -32,7 +34,7 @@ describe('hooks', function() {
         'after one'
       ];
 
-      expected.forEach(function(line, i) {
+      expected.forEach(function (line, i) {
         assert.equal(lines[i], line);
       });
 
diff --git a/test/integration/multiple-done.spec.js b/test/integration/multiple-done.spec.js
index 47e82dbebb..76a6483115 100644
--- a/test/integration/multiple-done.spec.js
+++ b/test/integration/multiple-done.spec.js
@@ -1,92 +1,94 @@
+'use strict';
+
 var assert = require('assert');
-var run    = require('./helpers').runMochaJSON;
-var args   = [];
+var run = require('./helpers').runMochaJSON;
+var args = [];
 
-describe('multiple calls to done()', function() {
+describe('multiple calls to done()', function () {
   var res;
-  describe('from a spec', function() {
-    before(function(done) {
-      run('multiple-done.fixture.js', args, function(err, result) {
+  describe('from a spec', function () {
+    before(function (done) {
+      run('multiple-done.fixture.js', args, function (err, result) {
         res = result;
         done(err);
       });
     });
 
-    it('results in failures', function() {
+    it('results in failures', function () {
       assert.equal(res.stats.pending, 0);
       assert.equal(res.stats.passes, 1);
       assert.equal(res.stats.failures, 1);
       assert.equal(res.code, 1);
     });
 
-    it('throws a descriptive error', function() {
+    it('throws a descriptive error', function () {
       assert.equal(res.failures[0].err.message,
         'done() called multiple times');
     });
   });
 
-  describe('with multiple specs', function() {
-    before(function(done) {
-      run('multiple-done-specs.fixture.js', args, function(err, result) {
+  describe('with multiple specs', function () {
+    before(function (done) {
+      run('multiple-done-specs.fixture.js', args, function (err, result) {
         res = result;
         done(err);
       });
     });
 
-    it('results in a failure', function() {
+    it('results in a failure', function () {
       assert.equal(res.stats.pending, 0);
       assert.equal(res.stats.passes, 2);
       assert.equal(res.stats.failures, 1);
       assert.equal(res.code, 1);
     });
 
-    it('correctly attributes the error', function() {
+    it('correctly attributes the error', function () {
       assert.equal(res.failures[0].fullTitle, 'suite test1');
       assert.equal(res.failures[0].err.message,
         'done() called multiple times');
     });
   });
 
-  describe('from a before hook', function() {
-    before(function(done) {
-      run('multiple-done-before.fixture.js', args, function(err, result) {
+  describe('from a before hook', function () {
+    before(function (done) {
+      run('multiple-done-before.fixture.js', args, function (err, result) {
         res = result;
         done(err);
       });
     });
 
-    it('results in a failure', function() {
+    it('results in a failure', function () {
       assert.equal(res.stats.pending, 0);
       assert.equal(res.stats.passes, 1);
       assert.equal(res.stats.failures, 1);
       assert.equal(res.code, 1);
     });
 
-    it('correctly attributes the error', function() {
+    it('correctly attributes the error', function () {
       assert.equal(res.failures[0].fullTitle, 'suite "before all" hook');
       assert.equal(res.failures[0].err.message,
         'done() called multiple times');
     });
   });
 
-  describe('from a beforeEach hook', function() {
-    before(function(done) {
-      run('multiple-done-beforeEach.fixture.js', args, function(err, result) {
+  describe('from a beforeEach hook', function () {
+    before(function (done) {
+      run('multiple-done-beforeEach.fixture.js', args, function (err, result) {
         res = result;
         done(err);
       });
     });
 
-    it('results in a failure', function() {
+    it('results in a failure', function () {
       assert.equal(res.stats.pending, 0);
       assert.equal(res.stats.passes, 2);
       assert.equal(res.stats.failures, 2);
       assert.equal(res.code, 2);
     });
 
-    it('correctly attributes the errors', function() {
+    it('correctly attributes the errors', function () {
       assert.equal(res.failures.length, 2);
-      res.failures.forEach(function(failure) {
+      res.failures.forEach(function (failure) {
         assert.equal(failure.fullTitle, 'suite "before each" hook');
         assert.equal(failure.err.message,
           'done() called multiple times');
diff --git a/test/integration/only.spec.js b/test/integration/only.spec.js
index 364d24718f..b37a4b263e 100644
--- a/test/integration/only.spec.js
+++ b/test/integration/only.spec.js
@@ -1,10 +1,12 @@
+'use strict';
+
 var run = require('./helpers').runMochaJSON;
 var assert = require('assert');
 
-describe('.only()', function() {
-  describe('bdd', function() {
-    it('should run only tests that marked as `only`', function(done) {
-      run('options/only/bdd.fixture.js', ['--ui', 'bdd'], function(err, res) {
+describe('.only()', function () {
+  describe('bdd', function () {
+    it('should run only tests that marked as `only`', function (done) {
+      run('options/only/bdd.fixture.js', ['--ui', 'bdd'], function (err, res) {
         assert(!err);
         assert.equal(res.stats.pending, 0);
         assert.equal(res.stats.passes, 11);
@@ -15,9 +17,9 @@ describe('.only()', function() {
     });
   });
 
-  describe('tdd', function() {
-    it('should run only tests that marked as `only`', function(done) {
-      run('options/only/tdd.fixture.js', ['--ui', 'tdd'], function(err, res) {
+  describe('tdd', function () {
+    it('should run only tests that marked as `only`', function (done) {
+      run('options/only/tdd.fixture.js', ['--ui', 'tdd'], function (err, res) {
         assert(!err);
         assert.equal(res.stats.pending, 0);
         assert.equal(res.stats.passes, 8);
@@ -28,9 +30,9 @@ describe('.only()', function() {
     });
   });
 
-  describe('qunit', function() {
-    it('should run only tests that marked as `only`', function(done) {
-      run('options/only/qunit.fixture.js', ['--ui', 'qunit'], function(err, res) {
+  describe('qunit', function () {
+    it('should run only tests that marked as `only`', function (done) {
+      run('options/only/qunit.fixture.js', ['--ui', 'qunit'], function (err, res) {
         assert(!err);
         assert.equal(res.stats.pending, 0);
         assert.equal(res.stats.passes, 5);
diff --git a/test/integration/options.spec.js b/test/integration/options.spec.js
index 4755647f76..7c7a3cc75e 100644
--- a/test/integration/options.spec.js
+++ b/test/integration/options.spec.js
@@ -1,16 +1,17 @@
-var assert = require('assert');
-var run    = require('./helpers').runMochaJSON;
-var args   = [];
+'use strict';
 
-describe('options', function() {
-  describe('--async-only', function() {
+var assert = require('assert');
+var run = require('./helpers').runMochaJSON;
+var args = [];
 
-    before(function() {
+describe('options', function () {
+  describe('--async-only', function () {
+    before(function () {
       args = ['--async-only'];
     });
 
-    it('should fail synchronous specs', function(done) {
-      run('options/async-only-sync.fixture.js', args, function(err, res) {
+    it('should fail synchronous specs', function (done) {
+      run('options/async-only-sync.fixture.js', args, function (err, res) {
         assert(!err);
         assert.equal(res.stats.pending, 0);
         assert.equal(res.stats.passes, 0);
@@ -22,8 +23,8 @@ describe('options', function() {
       });
     });
 
-    it('should allow asynchronous specs', function(done) {
-      run('options/async-only-async.fixture.js', args, function(err, res) {
+    it('should allow asynchronous specs', function (done) {
+      run('options/async-only-async.fixture.js', args, function (err, res) {
         assert(!err);
         assert.equal(res.stats.pending, 0);
         assert.equal(res.stats.passes, 1);
@@ -36,13 +37,13 @@ describe('options', function() {
     });
   });
 
-  describe('--bail', function() {
-    before(function() {
+  describe('--bail', function () {
+    before(function () {
       args = ['--bail'];
     });
 
-    it('should stop after the first error', function(done) {
-      run('options/bail.fixture.js', args, function(err, res) {
+    it('should stop after the first error', function (done) {
+      run('options/bail.fixture.js', args, function (err, res) {
         assert(!err);
         assert.equal(res.stats.pending, 0);
         assert.equal(res.stats.passes, 1);
@@ -56,13 +57,13 @@ describe('options', function() {
     });
   });
 
-  describe('--sort', function() {
-    before(function() {
+  describe('--sort', function () {
+    before(function () {
       args = ['--sort'];
     });
 
-    it('should sort tests in alphabetical order', function(done) {
-      run('options/sort*', args, function(err, res) {
+    it('should sort tests in alphabetical order', function (done) {
+      run('options/sort*', args, function (err, res) {
         assert(!err);
         assert.equal(res.stats.pending, 0);
         assert.equal(res.stats.passes, 2);
@@ -76,13 +77,13 @@ describe('options', function() {
     });
   });
 
-  describe('--delay', function() {
-    before(function() {
+  describe('--delay', function () {
+    before(function () {
       args = ['--delay'];
     });
 
-    it('should run the generated test suite', function(done) {
-      run('options/delay.fixture.js', args, function(err, res) {
+    it('should run the generated test suite', function (done) {
+      run('options/delay.fixture.js', args, function (err, res) {
         assert(!err);
         assert.equal(res.stats.pending, 0);
         assert.equal(res.stats.passes, 1);
@@ -95,8 +96,8 @@ describe('options', function() {
       });
     });
 
-    it('should throw an error if the test suite failed to run', function(done) {
-      run('options/delay-fail.fixture.js', args, function(err, res) {
+    it('should throw an error if the test suite failed to run', function (done) {
+      run('options/delay-fail.fixture.js', args, function (err, res) {
         assert(!err);
         assert.equal(res.stats.pending, 0);
         assert.equal(res.stats.passes, 0);
@@ -110,10 +111,10 @@ describe('options', function() {
     });
   });
 
-  describe('--grep', function() {
-    it('runs specs matching a string', function(done) {
+  describe('--grep', function () {
+    it('runs specs matching a string', function (done) {
       args = ['--grep', 'match'];
-      run('options/grep.fixture.js', args, function(err, res) {
+      run('options/grep.fixture.js', args, function (err, res) {
         assert(!err);
         assert.equal(res.stats.pending, 0);
         assert.equal(res.stats.passes, 2);
@@ -123,10 +124,10 @@ describe('options', function() {
       });
     });
 
-    describe('runs specs matching a RegExp', function() {
-      it('with RegExp like strings(pattern follow by flag)', function(done) {
+    describe('runs specs matching a RegExp', function () {
+      it('with RegExp like strings(pattern follow by flag)', function (done) {
         args = ['--grep', '/match/i'];
-        run('options/grep.fixture.js', args, function(err, res) {
+        run('options/grep.fixture.js', args, function (err, res) {
           assert(!err);
           assert.equal(res.stats.pending, 0);
           assert.equal(res.stats.passes, 4);
@@ -136,9 +137,9 @@ describe('options', function() {
         });
       });
 
-      it('string as pattern', function(done) {
+      it('string as pattern', function (done) {
         args = ['--grep', '.*'];
-        run('options/grep.fixture.js', args, function(err, res) {
+        run('options/grep.fixture.js', args, function (err, res) {
           assert(!err);
           assert.equal(res.stats.pending, 0);
           assert.equal(res.stats.passes, 4);
@@ -149,10 +150,10 @@ describe('options', function() {
       });
     });
 
-    describe('with --invert', function() {
-      it('runs specs that do not match the pattern', function(done) {
+    describe('with --invert', function () {
+      it('runs specs that do not match the pattern', function (done) {
         args = ['--grep', 'fail', '--invert'];
-        run('options/grep.fixture.js', args, function(err, res) {
+        run('options/grep.fixture.js', args, function (err, res) {
           assert(!err);
           assert.equal(res.stats.pending, 0);
           assert.equal(res.stats.passes, 4);
@@ -164,10 +165,10 @@ describe('options', function() {
     });
   });
 
-  describe('--retries', function() {
+  describe('--retries', function () {
     it('retries after a certain threshold', function (done) {
       args = ['--retries', '3'];
-      run('options/retries.fixture.js', args, function(err, res) {
+      run('options/retries.fixture.js', args, function (err, res) {
         assert(!err);
         assert.equal(res.stats.pending, 0);
         assert.equal(res.stats.passes, 0);
@@ -177,6 +178,6 @@ describe('options', function() {
         assert.equal(res.code, 1);
         done();
       });
-    })
+    });
   });
 });
diff --git a/test/integration/pending.spec.js b/test/integration/pending.spec.js
index 4d4beffc2a..19ae30ad3a 100644
--- a/test/integration/pending.spec.js
+++ b/test/integration/pending.spec.js
@@ -1,11 +1,13 @@
+'use strict';
+
 var assert = require('assert');
-var run    = require('./helpers').runMochaJSON;
-var args   = [];
+var run = require('./helpers').runMochaJSON;
+var args = [];
 
-describe('pending', function() {
-  describe('pending specs', function() {
-    it('should be created by omitting a function', function(done) {
-      run('pending/spec.fixture.js', args, function(err, res) {
+describe('pending', function () {
+  describe('pending specs', function () {
+    it('should be created by omitting a function', function (done) {
+      run('pending/spec.fixture.js', args, function (err, res) {
         assert(!err);
         assert.equal(res.stats.pending, 1);
         assert.equal(res.stats.passes, 0);
@@ -16,10 +18,10 @@ describe('pending', function() {
     });
   });
 
-  describe('synchronous skip()', function() {
-    describe('in spec', function() {
-      it('should immediately skip the spec and run all others', function(done) {
-        run('pending/skip-sync-spec.fixture.js', args, function(err, res) {
+  describe('synchronous skip()', function () {
+    describe('in spec', function () {
+      it('should immediately skip the spec and run all others', function (done) {
+        run('pending/skip-sync-spec.fixture.js', args, function (err, res) {
           assert(!err);
           assert.equal(res.stats.pending, 1);
           assert.equal(res.stats.passes, 1);
@@ -30,9 +32,9 @@ describe('pending', function() {
       });
     });
 
-    describe('in before', function() {
-      it('should skip all suite specs', function(done) {
-        run('pending/skip-sync-before.fixture.js', args, function(err, res) {
+    describe('in before', function () {
+      it('should skip all suite specs', function (done) {
+        run('pending/skip-sync-before.fixture.js', args, function (err, res) {
           assert(!err);
           assert.equal(res.stats.pending, 2);
           assert.equal(res.stats.passes, 0);
@@ -43,9 +45,9 @@ describe('pending', function() {
       });
     });
 
-    describe('in beforeEach', function() {
-      it('should skip all suite specs', function(done) {
-        run('pending/skip-sync-beforeEach.fixture.js', args, function(err, res) {
+    describe('in beforeEach', function () {
+      it('should skip all suite specs', function (done) {
+        run('pending/skip-sync-beforeEach.fixture.js', args, function (err, res) {
           assert(!err);
           assert.equal(res.stats.pending, 2);
           assert.equal(res.stats.passes, 0);
@@ -57,10 +59,10 @@ describe('pending', function() {
     });
   });
 
-  describe('asynchronous skip()', function() {
-    describe('in spec', function() {
-      it('should immediately skip the spec and run all others', function(done) {
-        run('pending/skip-async-spec.fixture.js', args, function(err, res) {
+  describe('asynchronous skip()', function () {
+    describe('in spec', function () {
+      it('should immediately skip the spec and run all others', function (done) {
+        run('pending/skip-async-spec.fixture.js', args, function (err, res) {
           assert(!err);
           assert.equal(res.stats.pending, 1);
           assert.equal(res.stats.passes, 1);
@@ -71,9 +73,9 @@ describe('pending', function() {
       });
     });
 
-    describe('in before', function() {
-      it('should skip all suite specs', function(done) {
-        run('pending/skip-async-before.fixture.js', args, function(err, res) {
+    describe('in before', function () {
+      it('should skip all suite specs', function (done) {
+        run('pending/skip-async-before.fixture.js', args, function (err, res) {
           assert(!err);
           assert.equal(res.stats.pending, 2);
           assert.equal(res.stats.passes, 0);
@@ -84,9 +86,9 @@ describe('pending', function() {
       });
     });
 
-    describe('in beforeEach', function() {
-      it('should skip all suite specs', function(done) {
-        run('pending/skip-sync-beforeEach.fixture.js', args, function(err, res) {
+    describe('in beforeEach', function () {
+      it('should skip all suite specs', function (done) {
+        run('pending/skip-sync-beforeEach.fixture.js', args, function (err, res) {
           assert(!err);
           assert.equal(res.stats.pending, 2);
           assert.equal(res.stats.passes, 0);
diff --git a/test/integration/regression.spec.js b/test/integration/regression.spec.js
index 8b6f49afa3..ffd17aa979 100644
--- a/test/integration/regression.spec.js
+++ b/test/integration/regression.spec.js
@@ -1,14 +1,16 @@
-var assert  = require('assert');
-var fs      = require('fs');
-var path    = require('path');
-var run     = require('./helpers').runMocha;
+'use strict';
+
+var assert = require('assert');
+var fs = require('fs');
+var path = require('path');
+var run = require('./helpers').runMocha;
 var runJSON = require('./helpers').runMochaJSON;
 
-describe('regressions', function() {
-  it('issue-1327: should run all 3 specs exactly once', function(done) {
+describe('regressions', function () {
+  it('issue-1327: should run all 3 specs exactly once', function (done) {
     var args = [];
-    run('regression/issue-1327.fixture.js', args, function(err, res) {
-      var occurences = function(str) {
+    run('regression/issue-1327.fixture.js', args, function (err, res) {
+      var occurences = function (str) {
         var pattern = new RegExp(str, 'g');
         return (res.output.match(pattern) || []).length;
       };
@@ -23,32 +25,34 @@ describe('regressions', function() {
     });
   });
 
-  it('should not duplicate mocha.opts args in process.argv', function() {
+  it('should not duplicate mocha.opts args in process.argv', function () {
     var processArgv = process.argv.join('');
     var mochaOpts = fs.readFileSync(path.join(__dirname, '..', 'mocha.opts'), 'utf-8').split(/[\s]+/).join('');
     assert.notEqual(processArgv.indexOf(mochaOpts), -1, 'process.argv missing mocha.opts');
     assert.equal(processArgv.indexOf(mochaOpts), processArgv.lastIndexOf(mochaOpts), 'process.argv contains duplicated mocha.opts');
   });
 
-  it('issue-1794: Can\'t --require custom UI and use it', function(done) {
+  it('issue-1794: Can\'t --require custom UI and use it', function (done) {
     var simpleUiPath = path.join(__dirname, 'fixtures', 'regression', '1794', 'simple-ui.js');
     var args = ['--require', simpleUiPath, '--ui', 'simple-ui'];
-    run('regression/1794/issue-1794.fixture.js', args, function(err, res) {
+    run('regression/1794/issue-1794.fixture.js', args, function (err, res) {
+      assert(!err);
       assert.equal(res.code, 0, 'Custom UI should be loaded');
       done();
     });
   });
 
-  it('issue-1991: Declarations do not get cleaned up unless you set them to `null` - Memory Leak', function(done) {
+  it('issue-1991: Declarations do not get cleaned up unless you set them to `null` - Memory Leak', function (done) {
     // on a modern MBP takes ±5 seconds on node 4.0, but on older laptops with node 0.12 ±40 seconds.
     // Could easily take longer on even weaker machines (Travis-CI containers for example).
     this.timeout(120000);
-    run('regression/issue-1991.fixture.js', [], function(err, res) {
+    run('regression/issue-1991.fixture.js', [], function (err, res) {
+      assert(!err);
       assert.equal(/process out of memory/.test(res.output), false, 'fixture\'s process out of memory!');
       assert.equal(res.code, 0, 'Runnable fn (it/before[Each]/after[Each]) references should be deleted to avoid memory leaks');
       done();
     });
-  })
+  });
 
   describe('issue-2286: after doesn\'t execute if test was skipped in beforeEach', function () {
     var afterWasRun = false;
@@ -56,14 +60,14 @@ describe('regressions', function() {
       beforeEach(function () { this.skip(); });
       after(function () { afterWasRun = true; });
       it('should be pending', function () {});
-    })
+    });
     after('meta test', function () {
       afterWasRun.should.be.ok();
     });
   });
 
   it('issue-2315: cannot read property currentRetry of undefined', function (done) {
-    runJSON('regression/issue-2315.js', [], function(err, res) {
+    runJSON('regression/issue-2315.js', [], function (err, res) {
       assert(!err);
       assert.equal(res.stats.pending, 0);
       assert.equal(res.stats.passes, 0);
@@ -73,9 +77,9 @@ describe('regressions', function() {
     });
   });
 
-  it('issue-2406: should run nested describe.only suites', function(done) {
+  it('issue-2406: should run nested describe.only suites', function (done) {
     this.timeout(2000);
-    runJSON('regression/issue-2406.fixture.js', [], function(err, res) {
+    runJSON('regression/issue-2406.fixture.js', [], function (err, res) {
       assert(!err);
       assert.equal(res.stats.pending, 0);
       assert.equal(res.stats.passes, 2);
@@ -85,8 +89,8 @@ describe('regressions', function() {
     });
   });
 
-  it('issue-2417: should not recurse infinitely with .only suites nested within each other', function() {
-    runJSON('regression/issue-2417.fixture.js', [], function(err, res) {
+  it('issue-2417: should not recurse infinitely with .only suites nested within each other', function () {
+    runJSON('regression/issue-2417.fixture.js', [], function (err, res) {
       assert(!err);
       assert.equal(res.stats.pending, 0);
       assert.equal(res.stats.passes, 1);
@@ -95,8 +99,8 @@ describe('regressions', function() {
     });
   });
 
-  it('issue-1417 uncaught exceptions from async specs', function(done) {
-    runJSON('regression/issue-1417.js', [], function(err, res) {
+  it('issue-1417 uncaught exceptions from async specs', function (done) {
+    runJSON('regression/issue-1417.js', [], function (err, res) {
       assert(!err);
       assert.equal(res.stats.pending, 0);
       assert.equal(res.stats.passes, 0);
diff --git a/test/integration/reporters.spec.js b/test/integration/reporters.spec.js
index 9595611829..5cfee57037 100644
--- a/test/integration/reporters.spec.js
+++ b/test/integration/reporters.spec.js
@@ -1,26 +1,28 @@
+'use strict';
+
 var assert = require('assert');
-var os     = require('os');
-var fs     = require('fs');
+var os = require('os');
+var fs = require('fs');
 var crypto = require('crypto');
-var path   = require('path');
-var run    = require('./helpers').runMocha;
+var path = require('path');
+var run = require('./helpers').runMocha;
 
-describe('reporters', function() {
-  describe('markdown', function() {
+describe('reporters', function () {
+  describe('markdown', function () {
     var res;
 
-    before(function(done) {
-      run('passing.fixture.js', ['--reporter', 'markdown'], function(err, result) {
+    before(function (done) {
+      run('passing.fixture.js', ['--reporter', 'markdown'], function (err, result) {
         res = result;
         done(err);
       });
     });
 
-    it('does not exceed maximum callstack (issue: 1875)', function() {
+    it('does not exceed maximum callstack (issue: 1875)', function () {
       assert(res.output.indexOf('RangeError') === -1, 'Threw RangeError');
     });
 
-    it('contains spec src', function() {
+    it('contains spec src', function () {
       var src = [
         '```js',
         'assert(true);',
@@ -31,8 +33,8 @@ describe('reporters', function() {
     });
   });
 
-  describe('xunit', function() {
-    it('prints test cases with --reporter-options output (issue: 1864)', function(done) {
+  describe('xunit', function () {
+    it('prints test cases with --reporter-options output (issue: 1864)', function (done) {
       var randomStr = crypto.randomBytes(8).toString('hex');
       var tmpDir = os.tmpDir().replace(new RegExp(path.sep + '$'), '');
       var tmpFile = tmpDir + path.sep + 'test-issue-1864-' + randomStr + '.xml';
@@ -44,13 +46,13 @@ describe('reporters', function() {
         '</testsuite>'
       ];
 
-      run('passing.fixture.js', args, function(err, result) {
+      run('passing.fixture.js', args, function (err, result) {
         if (err) return done(err);
 
         var xml = fs.readFileSync(tmpFile, 'utf8');
         fs.unlinkSync(tmpFile);
 
-        expectedOutput.forEach(function(line) {
+        expectedOutput.forEach(function (line) {
           assert(xml.indexOf(line) !== -1, 'XML did not contain ' + line);
         });
 
diff --git a/test/integration/retries.spec.js b/test/integration/retries.spec.js
index ce76545b00..28ed702c5f 100644
--- a/test/integration/retries.spec.js
+++ b/test/integration/retries.spec.js
@@ -1,18 +1,20 @@
+'use strict';
+
 var assert = require('assert');
 var helpers = require('./helpers');
-var args   = [];
+var args = [];
 var bang = require('../../lib/reporters/base').symbols.bang;
 
-describe('retries', function() {
-  it('are ran in correct order', function(done) {
-    helpers.runMocha('retries/hooks.fixture.js', args, function(err, res) {
+describe('retries', function () {
+  it('are ran in correct order', function (done) {
+    helpers.runMocha('retries/hooks.fixture.js', args, function (err, res) {
       var lines, expected;
 
       assert(!err);
 
-      lines = res.output.split(helpers.splitRegExp).map(function(line) {
+      lines = res.output.split(helpers.splitRegExp).map(function (line) {
         return line.trim();
-      }).filter(function(line) {
+      }).filter(function (line) {
         return line.length;
       }).slice(0, -1);
 
@@ -36,7 +38,7 @@ describe('retries', function() {
         'after'
       ];
 
-      expected.forEach(function(line, i) {
+      expected.forEach(function (line, i) {
         assert.equal(lines[i], line);
       });
 
@@ -46,7 +48,7 @@ describe('retries', function() {
   });
 
   it('should exit early if test passes', function (done) {
-    helpers.runMochaJSON('retries/early-pass.fixture.js', args, function(err, res) {
+    helpers.runMochaJSON('retries/early-pass.fixture.js', args, function (err, res) {
       assert(!err);
       assert.equal(res.stats.passes, 1);
       assert.equal(res.stats.failures, 0);
@@ -58,7 +60,7 @@ describe('retries', function() {
   });
 
   it('should let test override', function (done) {
-    helpers.runMochaJSON('retries/nested.fixture.js', args, function(err, res) {
+    helpers.runMochaJSON('retries/nested.fixture.js', args, function (err, res) {
       assert(!err);
       assert.equal(res.stats.passes, 0);
       assert.equal(res.stats.failures, 1);
@@ -70,14 +72,14 @@ describe('retries', function() {
   });
 
   it('should not hang w/ async test', function (done) {
-    helpers.runMocha('retries/async.fixture.js', args, function(err, res) {
+    helpers.runMocha('retries/async.fixture.js', args, function (err, res) {
       var lines, expected;
 
       assert(!err);
 
-      lines = res.output.split(helpers.splitRegExp).map(function(line) {
+      lines = res.output.split(helpers.splitRegExp).map(function (line) {
         return line.trim();
-      }).filter(function(line) {
+      }).filter(function (line) {
         return line.length;
       }).slice(0, -1);
 
@@ -95,7 +97,7 @@ describe('retries', function() {
         'after'
       ];
 
-      expected.forEach(function(line, i) {
+      expected.forEach(function (line, i) {
         assert.equal(lines[i], line);
       });
 
diff --git a/test/integration/suite.spec.js b/test/integration/suite.spec.js
index 00066a34f4..171a929ed1 100644
--- a/test/integration/suite.spec.js
+++ b/test/integration/suite.spec.js
@@ -1,11 +1,13 @@
+'use strict';
+
 var assert = require('assert');
 var run = require('./helpers').runMocha;
 var args = [];
 
-describe('suite w/no callback', function() {
+describe('suite w/no callback', function () {
   this.timeout(1000);
-  it('should throw a helpful error message when a callback for suite is not supplied', function(done) {
-    run('suite/suite-no-callback.fixture.js', args, function(err, res) {
+  it('should throw a helpful error message when a callback for suite is not supplied', function (done) {
+    run('suite/suite-no-callback.fixture.js', args, function (err, res) {
       assert(!err);
       var result = res.output.match(/no callback was supplied/) || [];
       assert.equal(result.length, 1);
@@ -14,12 +16,12 @@ describe('suite w/no callback', function() {
   });
 });
 
-describe('skipped suite w/no callback', function() {
+describe('skipped suite w/no callback', function () {
   this.timeout(1000);
-  it('should not throw an error when a callback for skipped suite is not supplied', function(done) {
-    run('suite/suite-skipped-no-callback.fixture.js', args, function(err, res) {
+  it('should not throw an error when a callback for skipped suite is not supplied', function (done) {
+    run('suite/suite-skipped-no-callback.fixture.js', args, function (err, res) {
       assert(!err);
-      pattern = new RegExp("Error", 'g');
+      var pattern = new RegExp('Error', 'g');
       var result = res.output.match(pattern) || [];
       assert.equal(result.length, 0);
       done();
@@ -27,13 +29,12 @@ describe('skipped suite w/no callback', function() {
   });
 });
 
-
-describe('skipped suite w/ callback', function() {
+describe('skipped suite w/ callback', function () {
   this.timeout(1000);
-  it('should not throw an error when a callback for skipped suite is supplied', function(done) {
-    run('suite/suite-skipped-callback.fixture.js', args, function(err, res) {
+  it('should not throw an error when a callback for skipped suite is supplied', function (done) {
+    run('suite/suite-skipped-callback.fixture.js', args, function (err, res) {
       assert(!err);
-      pattern = new RegExp("Error", 'g');
+      var pattern = new RegExp('Error', 'g');
       var result = res.output.match(pattern) || [];
       assert.equal(result.length, 0);
       done();
diff --git a/test/integration/timeout.spec.js b/test/integration/timeout.spec.js
index 33b8e33093..4e0f989e86 100644
--- a/test/integration/timeout.spec.js
+++ b/test/integration/timeout.spec.js
@@ -1,10 +1,12 @@
+'use strict';
+
 var assert = require('assert');
-var run    = require('./helpers').runMochaJSON;
-var args   = [];
+var run = require('./helpers').runMochaJSON;
+var args = [];
 
-describe('this.timeout()', function() {
-  it('is respected by sync and async suites', function(done) {
-    run('timeout.fixture.js', args, function(err, res) {
+describe('this.timeout()', function () {
+  it('is respected by sync and async suites', function (done) {
+    run('timeout.fixture.js', args, function (err, res) {
       assert(!err);
       assert.equal(res.stats.pending, 0);
       assert.equal(res.stats.passes, 0);
diff --git a/test/integration/uncaught.spec.js b/test/integration/uncaught.spec.js
index 87dde90902..92e39c195e 100644
--- a/test/integration/uncaught.spec.js
+++ b/test/integration/uncaught.spec.js
@@ -1,10 +1,12 @@
+'use strict';
+
 var assert = require('assert');
-var run    = require('./helpers').runMochaJSON;
-var args   = [];
+var run = require('./helpers').runMochaJSON;
+var args = [];
 
-describe('uncaught exceptions', function() {
-  it('handles uncaught exceptions from hooks', function(done) {
-    run('uncaught-hook.fixture.js', args, function(err, res) {
+describe('uncaught exceptions', function () {
+  it('handles uncaught exceptions from hooks', function (done) {
+    run('uncaught-hook.fixture.js', args, function (err, res) {
       assert(!err);
       assert.equal(res.stats.pending, 0);
       assert.equal(res.stats.passes, 0);
@@ -17,8 +19,8 @@ describe('uncaught exceptions', function() {
     });
   });
 
-  it('handles uncaught exceptions from async specs', function(done) {
-    run('uncaught.fixture.js', args, function(err, res) {
+  it('handles uncaught exceptions from async specs', function (done) {
+    run('uncaught.fixture.js', args, function (err, res) {
       assert(!err);
       assert.equal(res.stats.pending, 0);
       assert.equal(res.stats.passes, 0);
diff --git a/test/jsapi/index.js b/test/jsapi/index.js
index a096186b96..42133578e0 100644
--- a/test/jsapi/index.js
+++ b/test/jsapi/index.js
@@ -1,5 +1,6 @@
-var Mocha = require('../../')
-  , path = require('path');
+'use strict';
+
+var Mocha = require('../../');
 
 var mocha = new Mocha({
   ui: 'bdd',
@@ -22,8 +23,8 @@ mocha.addFile('test/acceptance/fs.spec.js');
 mocha.addFile('test/acceptance/globals.spec.js');
 mocha.addFile('test/acceptance/timeout.spec.js');
 
-mocha.run(function(){
+mocha.run(function () {
   console.log('done');
-}).on('pass', function(test){
+}).on('pass', function (test) {
   // console.log('... %s', test.title);
 });
diff --git a/test/mocha.opts b/test/mocha.opts
index cd797e2ae0..36146eb65e 100644
--- a/test/mocha.opts
+++ b/test/mocha.opts
@@ -1,5 +1,5 @@
 --require should
---require ./test/fixture-expect.js
+--require ./test/setup
 --reporter dot
 --ui bdd
 --globals okGlobalA,okGlobalB
diff --git a/test/mocha.spec.js b/test/mocha.spec.js
index 46411fc18b..618742cdbd 100644
--- a/test/mocha.spec.js
+++ b/test/mocha.spec.js
@@ -1,33 +1,35 @@
+'use strict';
+
 var Mocha = require('../');
 var Test = Mocha.Test;
 
-describe('Mocha', function(){
-  var blankOpts = { reporter: function(){} }; // no output
+describe('Mocha', function () {
+  var blankOpts = { reporter: function () {} }; // no output
 
-  describe('.run(fn)', function(){
-    it('should not raise errors if callback was not provided', function(){
+  describe('.run(fn)', function () {
+    it('should not raise errors if callback was not provided', function () {
       var mocha = new Mocha(blankOpts);
       mocha.run();
-    })
+    });
 
-    it('should execute the callback when complete', function(done) {
+    it('should execute the callback when complete', function (done) {
       var mocha = new Mocha(blankOpts);
-      mocha.run(function(){
+      mocha.run(function () {
         done();
-      })
-    })
+      });
+    });
 
-    it('should execute the callback with the number of failures '+
-      'as parameter', function(done) {
+    it('should execute the callback with the number of failures ' +
+      'as parameter', function (done) {
       var mocha = new Mocha(blankOpts);
-      var failingTest = new Test('failing test', function(){
+      var failingTest = new Test('failing test', function () {
         throw new Error('such fail');
       });
       mocha.suite.addTest(failingTest);
-      mocha.run(function(failures) {
+      mocha.run(function (failures) {
         failures.should.equal(1);
         done();
       });
-    })
-  })
-})
+    });
+  });
+});
diff --git a/test/ms.spec.js b/test/ms.spec.js
index 1fd9740a62..26f5c30209 100644
--- a/test/ms.spec.js
+++ b/test/ms.spec.js
@@ -1,71 +1,71 @@
 'use strict';
 var ms = require('../lib/ms');
 
-describe('.ms()', function() {
+describe('.ms()', function () {
   // Helpers
   var time = {
-    minutes: function(n) { return n * 60 * 1000; },
+    minutes: function (n) { return n * 60 * 1000; },
     hours: function (n) { return n * this.minutes(60); },
-    days: function(n) { return n * this.hours(24); },
-    years: function(n) { return n * this.days(365.25); }
+    days: function (n) { return n * this.hours(24); },
+    years: function (n) { return n * this.days(365.25); }
   };
-  describe('get a value that less than 1 second', function() {
-    it('should return milliseconds representation', function() {
+  describe('get a value that less than 1 second', function () {
+    it('should return milliseconds representation', function () {
       ms(200).should.equal('200ms');
       ms(30).should.equal('30ms');
       ms(2000).should.not.equal('2000ms');
     });
   });
 
-  describe('seconds representation', function() {
-    it('should return short format', function() {
+  describe('seconds representation', function () {
+    it('should return short format', function () {
       ms(2000).should.equal('2s');
     });
 
-    it('should return long format', function() {
+    it('should return long format', function () {
       ms(2000, { long: true }).should.equal('2 seconds');
       ms(1000, { long: true }).should.equal('1 second');
       ms(1010, { long: true }).should.equal('1 second');
     });
   });
 
-  describe('minutess representation', function() {
-    it('should return short format', function() {
+  describe('minutess representation', function () {
+    it('should return short format', function () {
       ms(time.minutes(1)).should.equal('1m');
     });
 
-    it('should return long format', function() {
+    it('should return long format', function () {
       ms(time.minutes(1), { long: true }).should.equal('1 minute');
       ms(time.minutes(3), { long: true }).should.equal('3 minutes');
     });
   });
 
-  describe('hours representation', function() {
-    it('should return short format', function() {
+  describe('hours representation', function () {
+    it('should return short format', function () {
       ms(time.hours(1)).should.equal('1h');
     });
 
-    it('should return long format', function() {
+    it('should return long format', function () {
       ms(time.hours(1), { long: true }).should.equal('1 hour');
       ms(time.hours(3), { long: true }).should.equal('3 hours');
     });
   });
 
-  describe('days representation', function() {
-    it('should return short format', function() {
+  describe('days representation', function () {
+    it('should return short format', function () {
       ms(time.days(1)).should.equal('1d');
     });
 
-    it('should return long format', function() {
+    it('should return long format', function () {
       ms(time.days(1), { long: true }).should.equal('1 day');
       ms(time.days(3), { long: true }).should.equal('3 days');
     });
   });
 
-  describe('Getting string value', function() {
-    it('should return the milliseconds representation(Number)', function() {
+  describe('Getting string value', function () {
+    it('should return the milliseconds representation(Number)', function () {
       ms('1 second').should.equal(1000);
-      
+
       ms('1 minute').should.equal(time.minutes(1));
       ms('6 minutes').should.equal(time.minutes(6));
 
diff --git a/test/reporters/base.spec.js b/test/reporters/base.spec.js
index bbd0d3a9a7..6282d882ff 100644
--- a/test/reporters/base.spec.js
+++ b/test/reporters/base.spec.js
@@ -1,9 +1,11 @@
+'use strict';
+
 var assert = require('assert');
 
-var Base   = require('../../lib/reporters/base')
-  , Assert = require('assert').AssertionError;
+var Base = require('../../lib/reporters/base');
+var Assert = require('assert').AssertionError;
 
-function makeTest(err) {
+function makeTest (err) {
   return {
     err: err,
     fullTitle: function () {
@@ -13,9 +15,9 @@ function makeTest(err) {
 }
 
 describe('Base reporter', function () {
-  var stdout
-    , stdoutWrite
-    , useColors;
+  var stdout;
+  var stdoutWrite;
+  var useColors;
 
   beforeEach(function () {
     stdout = [];
@@ -32,10 +34,10 @@ describe('Base reporter', function () {
     Base.useColors = useColors;
   });
 
-  describe('showDiff', function() {
+  describe('showDiff', function () {
     it('should show diffs by default', function () {
-      var err = new Assert({ actual: 'foo', expected: 'bar' })
-        , errOut;
+      var err = new Assert({ actual: 'foo', expected: 'bar' });
+      var errOut;
 
       var test = makeTest(err);
 
@@ -47,13 +49,12 @@ describe('Base reporter', function () {
     });
 
     it('should show diffs if property set to `true`', function () {
-      var err = new Assert({ actual: 'foo', expected: 'bar' })
-        , errOut;
+      var err = new Assert({ actual: 'foo', expected: 'bar' });
+      var errOut;
 
       err.showDiff = true;
       var test = makeTest(err);
 
-
       Base.list([test]);
 
       errOut = stdout.join('\n');
@@ -62,8 +63,8 @@ describe('Base reporter', function () {
     });
 
     it('should not show diffs when showDiff property set to `false`', function () {
-      var err = new Assert({ actual: 'foo', expected: 'bar' })
-        , errOut;
+      var err = new Assert({ actual: 'foo', expected: 'bar' });
+      var errOut;
 
       err.showDiff = false;
       var test = makeTest(err);
@@ -76,8 +77,8 @@ describe('Base reporter', function () {
     });
 
     it('should not show diffs when expected is not defined', function () {
-      var err = new Error('ouch')
-        , errOut;
+      var err = new Error('ouch');
+      var errOut;
 
       var test = makeTest(err);
 
@@ -87,14 +88,13 @@ describe('Base reporter', function () {
       errOut.should.not.match(/\- actual/);
       errOut.should.not.match(/\+ expected/);
     });
-
   });
 
-  describe('Getting two strings', function() {
+  describe('Getting two strings', function () {
     // Fix regression V1.2.1(see: issue #1241)
     it('should show strings diff as is', function () {
-      var err = new Error('test'),
-        errOut;
+      var err = new Error('test');
+      var errOut;
 
       err.actual = 'foo\nbar';
       err.expected = 'foo\nbaz';
@@ -114,11 +114,11 @@ describe('Base reporter', function () {
   });
 
   it('should stringify objects', function () {
-    var err = new Error('test'),
-      errOut;
+    var err = new Error('test');
+    var errOut;
 
-    err.actual = {key:"a1"};
-    err.expected = {key:"e1"};
+    err.actual = {key: 'a1'};
+    err.expected = {key: 'e1'};
     err.showDiff = true;
     var test = makeTest(err);
 
@@ -132,8 +132,8 @@ describe('Base reporter', function () {
   });
 
   it('should stringify Object.create(null)', function () {
-    var err = new Error('test'),
-      errOut;
+    var err = new Error('test');
+    var errOut;
 
     err.actual = Object.create(null);
     err.actual.hasOwnProperty = 1;
@@ -189,7 +189,7 @@ describe('Base reporter', function () {
   it('should use the inspect() property if `message` is not set', function () {
     var err = {
       showDiff: false,
-      inspect: function() { return 'an error happened'; },
+      inspect: function () { return 'an error happened'; }
     };
     var test = makeTest(err);
     Base.list([test]);
@@ -210,5 +210,4 @@ describe('Base reporter', function () {
     var errOut = stdout.join('\n').trim();
     errOut.should.equal('1) test title:\n     Error\n  foo\n  bar');
   });
-
 });
diff --git a/test/reporters/json.spec.js b/test/reporters/json.spec.js
index e7b8955757..74151fdc8b 100644
--- a/test/reporters/json.spec.js
+++ b/test/reporters/json.spec.js
@@ -1,61 +1,63 @@
-var Mocha = require('../../')
-  , Suite = Mocha.Suite
-  , Runner = Mocha.Runner
-  , Test = Mocha.Test;
+'use strict';
 
-describe('json reporter', function(){
+var Mocha = require('../../');
+var Suite = Mocha.Suite;
+var Runner = Mocha.Runner;
+var Test = Mocha.Test;
+
+describe('json reporter', function () {
   var suite, runner;
 
-  beforeEach(function(){
+  beforeEach(function () {
     var mocha = new Mocha({
       reporter: 'json'
     });
     suite = new Suite('JSON suite', 'root');
     runner = new Runner(suite);
+    /* eslint no-unused-vars: off */
     var mochaReporter = new mocha._reporter(runner);
   });
 
-   it('should have 1 test failure', function(done){
-     var testTitle = 'json test 1';
-     var error = { message: 'oh shit' };
+  it('should have 1 test failure', function (done) {
+    var testTitle = 'json test 1';
+    var error = { message: 'oh shit' };
 
-     suite.addTest(new Test(testTitle, function (done) {
-       done(new Error(error.message));
-     }));
+    suite.addTest(new Test(testTitle, function (done) {
+      done(new Error(error.message));
+    }));
 
-     runner.run(function(failureCount) {
-       failureCount.should.be.exactly(1);
-       runner.should.have.property('testResults');
-       runner.testResults.should.have.property('failures');
-       runner.testResults.failures.should.be.an.instanceOf(Array);
-       runner.testResults.failures.should.have.a.lengthOf(1);
+    runner.run(function (failureCount) {
+      failureCount.should.be.exactly(1);
+      runner.should.have.property('testResults');
+      runner.testResults.should.have.property('failures');
+      runner.testResults.failures.should.be.an.instanceOf(Array);
+      runner.testResults.failures.should.have.a.lengthOf(1);
 
-       var failure = runner.testResults.failures[0];
-       failure.should.have.property('title', testTitle);
-       failure.err.message.should.equal(error.message);
-       failure.should.have.properties('err');
+      var failure = runner.testResults.failures[0];
+      failure.should.have.property('title', testTitle);
+      failure.err.message.should.equal(error.message);
+      failure.should.have.properties('err');
 
-       done();
-     });
+      done();
+    });
   });
 
-  it('should have 1 test pending', function(done) {
+  it('should have 1 test pending', function (done) {
     var testTitle = 'json test 1';
 
-     suite.addTest(new Test(testTitle));
+    suite.addTest(new Test(testTitle));
 
-     runner.run(function(failureCount) {
-       failureCount.should.be.exactly(0);
-       runner.should.have.property('testResults');
-       runner.testResults.should.have.property('pending');
-       runner.testResults.pending.should.be.an.instanceOf(Array);
-       runner.testResults.pending.should.have.a.lengthOf(1);
+    runner.run(function (failureCount) {
+      failureCount.should.be.exactly(0);
+      runner.should.have.property('testResults');
+      runner.testResults.should.have.property('pending');
+      runner.testResults.pending.should.be.an.instanceOf(Array);
+      runner.testResults.pending.should.have.a.lengthOf(1);
 
-       var pending = runner.testResults.pending[0];
-       pending.should.have.property('title', testTitle);
-
-       done();
-     });
-  })
+      var pending = runner.testResults.pending[0];
+      pending.should.have.property('title', testTitle);
 
+      done();
+    });
+  });
 });
diff --git a/test/reporters/nyan.spec.js b/test/reporters/nyan.spec.js
index 37c9b7c372..07c455efd3 100644
--- a/test/reporters/nyan.spec.js
+++ b/test/reporters/nyan.spec.js
@@ -1,30 +1,31 @@
-var reporters = require('../../').reporters
-   , NyanCat = reporters.Nyan;
+'use strict';
 
+var reporters = require('../../').reporters;
+var NyanCat = reporters.Nyan;
 
 describe('nyan face', function () {
   it('nyan face:(x .x) when "failures" at least one', function () {
-    var nyanCat = new NyanCat({on: function(){}});
+    var nyanCat = new NyanCat({on: function () {}});
     nyanCat.stats = { passes: 2, pending: 1, failures: 1 };
-    nyanCat.face.call(nyanCat).should.equal('( x .x)');
+    nyanCat.face().should.equal('( x .x)');
   });
 
   it('expected nyan face:(x .x) when "pending" at least one and no failing', function () {
-    var nyanCat = new NyanCat({on: function(){}});
+    var nyanCat = new NyanCat({on: function () {}});
     nyanCat.stats = { passes: 2, pending: 1, failures: 0 };
-    nyanCat.face.call(nyanCat).should.equal('( o .o)');
+    nyanCat.face().should.equal('( o .o)');
   });
 
   it('expected nyan face:(^ .^) when "passing" only', function () {
-    var nyanCat = new NyanCat({on: function(){}});
+    var nyanCat = new NyanCat({on: function () {}});
     nyanCat.stats = { passes: 1, pending: 0, failures: 0 };
-    nyanCat.face.call(nyanCat).should.equal('( ^ .^)');
+    nyanCat.face().should.equal('( ^ .^)');
   });
 
   it('nyan face:(- .-) when otherwise', function (done) {
-    var nyanCat = new NyanCat({on: function(){}});
+    var nyanCat = new NyanCat({on: function () {}});
     nyanCat.stats = { passes: 0, pending: 0, failures: 0 };
-    nyanCat.face.call(nyanCat).should.equal('( - .-)');
+    nyanCat.face().should.equal('( - .-)');
     done();
   });
 });
diff --git a/test/runnable.spec.js b/test/runnable.spec.js
index d6b020a6a1..67cfcca38a 100644
--- a/test/runnable.spec.js
+++ b/test/runnable.spec.js
@@ -1,187 +1,188 @@
-var mocha = require('../')
-  , utils = mocha.utils
-  , Runnable = mocha.Runnable
-  , EventEmitter = require('events').EventEmitter;
+'use strict';
 
-describe('Runnable(title, fn)', function(){
+var mocha = require('../');
+var utils = mocha.utils;
+var Runnable = mocha.Runnable;
+
+describe('Runnable(title, fn)', function () {
   // For every test we poison the global time-related methods.
   // runnable.js etc. should keep its own local copy, in order to fix GH-237.
   // NB: we can't poison global.Date because the normal implementation of
   // global.setTimeout uses it [1] so if the runnable.js keeps a copy of
   // global.setTimeout (like it's supposed to), that will blow up.
   // [1]: https://github.com/joyent/node/blob/7fc835afe362ebd30a0dbec81d3360bd24525222/lib/timers.js#L74
-  var setTimeout = global.setTimeout
-    , setInterval = global.setInterval
-    , clearTimeout = global.clearTimeout
-    , clearInterval = global.clearInterval;
+  var setTimeout = global.setTimeout;
+  var setInterval = global.setInterval;
+  var clearTimeout = global.clearTimeout;
+  var clearInterval = global.clearInterval;
 
-  function poisonPill() {
+  function poisonPill () {
     throw new Error("Don't use global time-related stuff.");
   }
 
-  beforeEach(function(){
+  beforeEach(function () {
     global.setTimeout =
     global.setInterval =
     global.clearTimeout =
     global.clearInterval = poisonPill;
-  })
+  });
 
-  afterEach(function(){
+  afterEach(function () {
     global.setTimeout = setTimeout;
     global.setInterval = setInterval;
     global.clearTimeout = clearTimeout;
     global.clearInterval = clearInterval;
-  })
+  });
 
-  describe('#timeout(ms)', function(){
-    it('should set the timeout', function(){
-      var run = new Runnable;
-      run.timeout(1000)
+  describe('#timeout(ms)', function () {
+    it('should set the timeout', function () {
+      var run = new Runnable();
+      run.timeout(1000);
       run.timeout().should.equal(1000);
-    })
-  })
+    });
+  });
 
-  describe('#timeout(ms) when ms>2^31', function() {
-    it('should set disabled', function() {
+  describe('#timeout(ms) when ms>2^31', function () {
+    it('should set disabled', function () {
       var run = new Runnable();
       run.timeout(1e10);
       run.enableTimeouts().should.be.false;
     });
   });
 
-  describe('#enableTimeouts(enabled)', function(){
-    it('should set enabled', function(){
-      var run = new Runnable;
+  describe('#enableTimeouts(enabled)', function () {
+    it('should set enabled', function () {
+      var run = new Runnable();
       run.enableTimeouts(false);
       run.enableTimeouts().should.equal(false);
     });
   });
 
-  describe('#slow(ms)', function() {
+  describe('#slow(ms)', function () {
     var run;
 
-    beforeEach(function() {
+    beforeEach(function () {
       run = new Runnable();
     });
 
-    it('should set the slow threshold', function() {
+    it('should set the slow threshold', function () {
       run.slow(100);
       run.slow().should.equal(100);
     });
 
-    it('should not set the slow threshold if the parameter is not passed', function() {
+    it('should not set the slow threshold if the parameter is not passed', function () {
       run.slow();
       run.slow().should.equal(75);
     });
 
-    it('should not set the slow threshold if the parameter is undefined', function() {
+    it('should not set the slow threshold if the parameter is undefined', function () {
       run.slow(undefined);
       run.slow().should.equal(75);
     });
-  })
+  });
 
-  describe('.title', function(){
-    it('should be present', function(){
+  describe('.title', function () {
+    it('should be present', function () {
       new Runnable('foo').title.should.equal('foo');
-    })
-  })
+    });
+  });
 
-  describe('when arity >= 1', function(){
-    it('should be .async', function(){
-      var run = new Runnable('foo', function(done){});
+  describe('when arity >= 1', function () {
+    it('should be .async', function () {
+      var run = new Runnable('foo', function (done) {});
       run.async.should.equal(1);
       run.sync.should.be.false();
-    })
-  })
+    });
+  });
 
-  describe('when arity == 0', function(){
-    it('should be .sync', function(){
-      var run = new Runnable('foo', function(){});
+  describe('when arity == 0', function () {
+    it('should be .sync', function () {
+      var run = new Runnable('foo', function () {});
       run.async.should.be.equal(0);
       run.sync.should.be.true();
-    })
-  })
+    });
+  });
 
-  describe('#globals', function(){
-    it('should allow for whitelisting globals', function(done){
-      var test = new Runnable('foo', function(){});
+  describe('#globals', function () {
+    it('should allow for whitelisting globals', function (done) {
+      var test = new Runnable('foo', function () {});
       test.async.should.be.equal(0);
       test.sync.should.be.true();
       test.globals(['foobar']);
       test.run(done);
-    })
-  })
+    });
+  });
 
-  describe('#retries(n)', function(){
-    it('should set the number of retries', function(){
-      var run = new Runnable;
+  describe('#retries(n)', function () {
+    it('should set the number of retries', function () {
+      var run = new Runnable();
       run.retries(1);
       run.retries().should.equal(1);
-    })
-  })
+    });
+  });
 
-  describe('.run(fn)', function(){
-    describe('when .pending', function(){
-      it('should not invoke the callback', function(done){
-        var test = new Runnable('foo', function(){
+  describe('.run(fn)', function () {
+    describe('when .pending', function () {
+      it('should not invoke the callback', function (done) {
+        var test = new Runnable('foo', function () {
           throw new Error('should not be called');
         });
 
         test.pending = true;
         test.run(done);
-      })
-    })
+      });
+    });
 
-    describe('when sync', function(){
-      describe('without error', function(){
-        it('should invoke the callback', function(done){
+    describe('when sync', function () {
+      describe('without error', function () {
+        it('should invoke the callback', function (done) {
           var calls = 0;
-          var test = new Runnable('foo', function(){
+          var test = new Runnable('foo', function () {
             ++calls;
           });
 
-          test.run(function(err){
+          test.run(function (err) {
             calls.should.equal(1);
             test.duration.should.be.type('number');
             done(err);
-          })
-        })
-      })
+          });
+        });
+      });
 
-      describe('when an exception is thrown', function(){
-        it('should invoke the callback', function(done){
+      describe('when an exception is thrown', function () {
+        it('should invoke the callback', function (done) {
           var calls = 0;
-          var test = new Runnable('foo', function(){
+          var test = new Runnable('foo', function () {
             ++calls;
             throw new Error('fail');
           });
 
-          test.run(function(err){
+          test.run(function (err) {
             calls.should.equal(1);
             err.message.should.equal('fail');
             done();
-          })
-        })
-      })
+          });
+        });
+      });
 
-      describe('when an exception is thrown and is allowed to remain uncaught', function(){
-        it('throws an error when it is allowed', function(done) {
-          var test = new Runnable('foo', function(){
+      describe('when an exception is thrown and is allowed to remain uncaught', function () {
+        it('throws an error when it is allowed', function (done) {
+          var test = new Runnable('foo', function () {
             throw new Error('fail');
           });
           test.allowUncaught = true;
-          function fail() {
-            test.run(function(err) {});
+          function fail () {
+            test.run(function () {});
           }
           fail.should.throw('fail');
           done();
-        })
-      })
-    })
+        });
+      });
+    });
 
-    describe('when timeouts are disabled', function() {
-      it('should not error with timeout', function(done) {
-        var test = new Runnable('foo', function(done){
+    describe('when timeouts are disabled', function () {
+      it('should not error with timeout', function (done) {
+        var test = new Runnable('foo', function (done) {
           setTimeout(process.nextTick.bind(undefined, done), 2);
         });
         test.timeout(1);
@@ -190,32 +191,31 @@ describe('Runnable(title, fn)', function(){
       });
     });
 
-    describe('when async', function(){
-      describe('without error', function(){
-        it('should invoke the callback', function(done){
-          var calls = 0;
-          var test = new Runnable('foo', function(done){
+    describe('when async', function () {
+      describe('without error', function () {
+        it('should invoke the callback', function (done) {
+          var test = new Runnable('foo', function (done) {
             process.nextTick(done);
           });
 
           test.run(done);
-        })
-      })
+        });
+      });
 
-      describe('when the callback is invoked several times', function(){
-        describe('without an error', function(){
-          it('should emit a single "error" event', function(done){
+      describe('when the callback is invoked several times', function () {
+        describe('without an error', function () {
+          it('should emit a single "error" event', function (done) {
             var calls = 0;
             var errCalls = 0;
 
-            var test = new Runnable('foo', function(done){
+            var test = new Runnable('foo', function (done) {
               process.nextTick(done);
               process.nextTick(done);
               process.nextTick(done);
               process.nextTick(done);
             });
 
-            test.on('error', function(err){
+            test.on('error', function (err) {
               ++errCalls;
               err.message.should.equal('done() called multiple times');
               calls.should.equal(1);
@@ -223,18 +223,18 @@ describe('Runnable(title, fn)', function(){
               done();
             });
 
-            test.run(function(){
+            test.run(function () {
               ++calls;
             });
-          })
-        })
+          });
+        });
 
-        describe('with an error', function(){
-          it('should emit a single "error" event', function(done){
+        describe('with an error', function () {
+          it('should emit a single "error" event', function (done) {
             var calls = 0;
             var errCalls = 0;
 
-            var test = new Runnable('foo', function(done){
+            var test = new Runnable('foo', function (done) {
               done(new Error('fail'));
               process.nextTick(done);
               done(new Error('fail'));
@@ -242,7 +242,7 @@ describe('Runnable(title, fn)', function(){
               process.nextTick(done);
             });
 
-            test.on('error', function(err){
+            test.on('error', function (err) {
               ++errCalls;
               err.message.should.equal('fail');
               calls.should.equal(1);
@@ -250,133 +250,129 @@ describe('Runnable(title, fn)', function(){
               done();
             });
 
-            test.run(function(){
+            test.run(function () {
               ++calls;
             });
-          })
-        })
-      })
+          });
+        });
+      });
 
-      describe('when an exception is thrown', function(){
-        it('should invoke the callback', function(done){
-          var calls = 0;
-          var test = new Runnable('foo', function(done){
+      describe('when an exception is thrown', function () {
+        it('should invoke the callback', function (done) {
+          var test = new Runnable('foo', function (done) {
             throw new Error('fail');
-            process.nextTick(done);
           });
 
-          test.run(function(err){
+          test.run(function (err) {
             err.message.should.equal('fail');
             done();
           });
-        })
+        });
 
         it('should not throw its own exception if passed a non-object', function (done) {
-          var test = new Runnable('foo', function(done) {
+          var test = new Runnable('foo', function (done) {
+            /* eslint no-throw-literal: off */
             throw null;
-            process.nextTick(done);
           });
 
-          test.run(function(err) {
+          test.run(function (err) {
             err.message.should.equal(utils.undefinedError().message);
             done();
-          })
+          });
         });
-      })
+      });
 
-      describe('when an exception is thrown and is allowed to remain uncaught', function(){
-        it('throws an error when it is allowed', function(done) {
-          var test = new Runnable('foo', function(done){
+      describe('when an exception is thrown and is allowed to remain uncaught', function () {
+        it('throws an error when it is allowed', function (done) {
+          var test = new Runnable('foo', function (done) {
             throw new Error('fail');
-            process.nextTick(done);
           });
           test.allowUncaught = true;
-          function fail() {
-            test.run(function(err) {});
+          function fail () {
+            test.run(function () {});
           }
           fail.should.throw('fail');
           done();
-        })
-      })
+        });
+      });
 
-      describe('when an error is passed', function(){
-        it('should invoke the callback', function(done){
-          var calls = 0;
-          var test = new Runnable('foo', function(done){
+      describe('when an error is passed', function () {
+        it('should invoke the callback', function (done) {
+          var test = new Runnable('foo', function (done) {
             done(new Error('fail'));
           });
 
-          test.run(function(err){
+          test.run(function (err) {
             err.message.should.equal('fail');
             done();
           });
-        })
-      })
+        });
+      });
 
-      describe('when done() is invoked with a non-Error object', function(){
-        it('should invoke the callback', function(done){
-          var test = new Runnable('foo', function(done){
+      describe('when done() is invoked with a non-Error object', function () {
+        it('should invoke the callback', function (done) {
+          var test = new Runnable('foo', function (done) {
             done({ error: 'Test error' });
           });
 
-          test.run(function(err){
+          test.run(function (err) {
             err.message.should.equal('done() invoked with non-Error: {"error":"Test error"}');
             done();
           });
-        })
-      })
+        });
+      });
 
-      describe('when done() is invoked with a string', function(){
-        it('should invoke the callback', function(done){
-          var test = new Runnable('foo', function(done){
+      describe('when done() is invoked with a string', function () {
+        it('should invoke the callback', function (done) {
+          var test = new Runnable('foo', function (done) {
             done('Test error');
           });
 
-          test.run(function(err){
+          test.run(function (err) {
             err.message.should.equal('done() invoked with non-Error: Test error');
             done();
           });
-        })
-      })
+        });
+      });
 
-      it('should allow updating the timeout', function(done){
+      it('should allow updating the timeout', function (done) {
         var callCount = 0;
-        var increment = function() {
+        var increment = function () {
           callCount++;
         };
-        var test = new Runnable('foo', function(done){
+        var test = new Runnable('foo', function (done) {
           setTimeout(increment, 1);
           setTimeout(increment, 100);
         });
         test.timeout(10);
-        test.run(function(err){
+        test.run(function (err) {
           err.should.be.ok();
           callCount.should.equal(1);
           done();
         });
-      })
+      });
 
-      it('should allow a timeout of 0')
-    })
+      it('should allow a timeout of 0');
+    });
 
-    describe('when fn returns a promise', function(){
-      describe('when the promise is fulfilled with no value', function(){
+    describe('when fn returns a promise', function () {
+      describe('when the promise is fulfilled with no value', function () {
         var fulfilledPromise = {
           then: function (fulfilled, rejected) {
             process.nextTick(fulfilled);
           }
         };
 
-        it('should invoke the callback', function(done){
-          var test = new Runnable('foo', function(){
+        it('should invoke the callback', function (done) {
+          var test = new Runnable('foo', function () {
             return fulfilledPromise;
           });
 
           test.run(done);
-        })
-      })
+        });
+      });
 
-      describe('when the promise is fulfilled with a value', function(){
+      describe('when the promise is fulfilled with a value', function () {
         var fulfilledPromise = {
           then: function (fulfilled, rejected) {
             process.nextTick(function () {
@@ -385,16 +381,16 @@ describe('Runnable(title, fn)', function(){
           }
         };
 
-        it('should invoke the callback', function(done){
-          var test = new Runnable('foo', function(){
+        it('should invoke the callback', function (done) {
+          var test = new Runnable('foo', function () {
             return fulfilledPromise;
           });
 
           test.run(done);
-        })
-      })
+        });
+      });
 
-      describe('when the promise is rejected', function(){
+      describe('when the promise is rejected', function () {
         var expectedErr = new Error('fail');
         var rejectedPromise = {
           then: function (fulfilled, rejected) {
@@ -404,19 +400,19 @@ describe('Runnable(title, fn)', function(){
           }
         };
 
-        it('should invoke the callback', function(done){
-          var test = new Runnable('foo', function(){
+        it('should invoke the callback', function (done) {
+          var test = new Runnable('foo', function () {
             return rejectedPromise;
           });
 
-          test.run(function(err){
+          test.run(function (err) {
             err.should.equal(expectedErr);
             done();
           });
-        })
-      })
+        });
+      });
 
-      describe('when the promise is rejected without a reason', function(){
+      describe('when the promise is rejected without a reason', function () {
         var expectedErr = new Error('Promise rejected with no or falsy reason');
         var rejectedPromise = {
           then: function (fulfilled, rejected) {
@@ -426,45 +422,45 @@ describe('Runnable(title, fn)', function(){
           }
         };
 
-        it('should invoke the callback', function(done){
-          var test = new Runnable('foo', function(){
+        it('should invoke the callback', function (done) {
+          var test = new Runnable('foo', function () {
             return rejectedPromise;
           });
 
-          test.run(function(err){
+          test.run(function (err) {
             err.should.eql(expectedErr);
             done();
           });
-        })
-      })
+        });
+      });
 
-      describe('when the promise takes too long to settle', function(){
+      describe('when the promise takes too long to settle', function () {
         var foreverPendingPromise = {
           then: function () { }
         };
 
-        it('should give the timeout error', function(done){
-          var test = new Runnable('foo', function(){
+        it('should give the timeout error', function (done) {
+          var test = new Runnable('foo', function () {
             return foreverPendingPromise;
           });
 
           test.timeout(10);
-          test.run(function(err){
+          test.run(function (err) {
             err.should.be.ok();
             done();
           });
-        })
-      })
-    })
-
-    describe('when fn returns a non-promise', function(){
-      it('should invoke the callback', function(done){
-        var test = new Runnable('foo', function(){
-          return { then: "i ran my tests" };
+        });
+      });
+    });
+
+    describe('when fn returns a non-promise', function () {
+      it('should invoke the callback', function (done) {
+        var test = new Runnable('foo', function () {
+          return { then: 'i ran my tests' };
         });
 
         test.run(done);
-      })
-    })
-  })
-})
+      });
+    });
+  });
+});
diff --git a/test/runner.spec.js b/test/runner.spec.js
index 5392d0077b..e33013fd00 100644
--- a/test/runner.spec.js
+++ b/test/runner.spec.js
@@ -1,3 +1,5 @@
+'use strict';
+
 var mocha = require('../');
 var Suite = mocha.Suite;
 var Runner = mocha.Runner;
@@ -5,19 +7,19 @@ var Test = mocha.Test;
 var Hook = mocha.Hook;
 var path = require('path');
 
-function noop() {}
+function noop () {}
 
-describe('Runner', function() {
+describe('Runner', function () {
   var suite;
   var runner;
 
-  beforeEach(function() {
+  beforeEach(function () {
     suite = new Suite('Suite', 'root');
     runner = new Runner(suite);
   });
 
-  describe('.grep()', function() {
-    it('should update the runner.total with number of matched tests', function() {
+  describe('.grep()', function () {
+    it('should update the runner.total with number of matched tests', function () {
       suite.addTest(new Test('im a test about lions', noop));
       suite.addTest(new Test('im another test about lions', noop));
       suite.addTest(new Test('im a test about bears', noop));
@@ -26,7 +28,7 @@ describe('Runner', function() {
       newRunner.total.should.equal(2);
     });
 
-    it('should update the runner.total with number of matched tests when inverted', function() {
+    it('should update the runner.total with number of matched tests when inverted', function () {
       suite.addTest(new Test('im a test about lions', noop));
       suite.addTest(new Test('im another test about lions', noop));
       suite.addTest(new Test('im a test about bears', noop));
@@ -36,8 +38,8 @@ describe('Runner', function() {
     });
   });
 
-  describe('.grepTotal()', function() {
-    it('should return the total number of matched tests', function() {
+  describe('.grepTotal()', function () {
+    it('should return the total number of matched tests', function () {
       suite.addTest(new Test('im a test about lions', noop));
       suite.addTest(new Test('im another test about lions', noop));
       suite.addTest(new Test('im a test about bears', noop));
@@ -45,7 +47,7 @@ describe('Runner', function() {
       runner.grepTotal(suite).should.equal(2);
     });
 
-    it('should return the total number of matched tests when inverted', function() {
+    it('should return the total number of matched tests when inverted', function () {
       suite.addTest(new Test('im a test about lions', noop));
       suite.addTest(new Test('im another test about lions', noop));
       suite.addTest(new Test('im a test about bears', noop));
@@ -54,8 +56,8 @@ describe('Runner', function() {
     });
   });
 
-  describe('.globalProps()', function() {
-    it('should include common non enumerable globals', function() {
+  describe('.globalProps()', function () {
+    it('should include common non enumerable globals', function () {
       var props = runner.globalProps();
       props.should.containEql('setTimeout');
       props.should.containEql('clearTimeout');
@@ -66,20 +68,20 @@ describe('Runner', function() {
     });
   });
 
-  describe('.globals()', function() {
-    it('should default to the known globals', function() {
+  describe('.globals()', function () {
+    it('should default to the known globals', function () {
       runner.globals().length.should.be.above(16);
     });
 
-    it('should white-list globals', function() {
+    it('should white-list globals', function () {
       runner.globals(['foo', 'bar']);
       runner.globals().should.containEql('foo');
       runner.globals().should.containEql('bar');
     });
   });
 
-  describe('.checkGlobals(test)', function() {
-    it('should allow variables that match a wildcard', function(done) {
+  describe('.checkGlobals(test)', function () {
+    it('should allow variables that match a wildcard', function (done) {
       runner.globals(['foo*', 'giz*']);
       global.foo = 'baz';
       global.gizmo = 'quux';
@@ -89,11 +91,11 @@ describe('Runner', function() {
       done();
     });
 
-    it('should emit "fail" when a new global is introduced', function(done) {
+    it('should emit "fail" when a new global is introduced', function (done) {
       var test = new Test('im a test', noop);
       runner.checkGlobals();
       global.foo = 'bar';
-      runner.on('fail', function(_test, err) {
+      runner.on('fail', function (_test, err) {
         _test.should.equal(test);
         err.message.should.equal('global leak detected: foo');
         delete global.foo;
@@ -102,11 +104,11 @@ describe('Runner', function() {
       runner.checkGlobals(test);
     });
 
-    it('should emit "fail" when a single new disallowed global is introduced after a single extra global is allowed', function(done) {
+    it('should emit "fail" when a single new disallowed global is introduced after a single extra global is allowed', function (done) {
       var doneCalled = false;
       runner.globals('good');
       global.bad = 1;
-      runner.on('fail', function() {
+      runner.on('fail', function () {
         delete global.bad;
         done();
         doneCalled = true;
@@ -117,7 +119,7 @@ describe('Runner', function() {
       }
     });
 
-    it('should not fail when a new common global is introduced', function() {
+    it('should not fail when a new common global is introduced', function () {
       // verify that the prop isn't enumerable
       delete global.XMLHttpRequest;
       global.propertyIsEnumerable('XMLHttpRequest').should.not.be.ok();
@@ -128,7 +130,7 @@ describe('Runner', function() {
       var newRunner = new Runner(suite);
 
       // make the prop enumerable again.
-      global.XMLHttpRequest = function() {};
+      global.XMLHttpRequest = function () {};
       global.propertyIsEnumerable('XMLHttpRequest').should.be.ok();
 
       // verify the test hasn't failed.
@@ -139,12 +141,12 @@ describe('Runner', function() {
       delete global.XMLHttpRequest;
     });
 
-    it('should pluralize the error message when several are introduced', function(done) {
+    it('should pluralize the error message when several are introduced', function (done) {
       var test = new Test('im a test', noop);
       runner.checkGlobals();
       global.foo = 'bar';
       global.bar = 'baz';
-      runner.on('fail', function(_test, err) {
+      runner.on('fail', function (_test, err) {
         _test.should.equal(test);
         err.message.should.equal('global leaks detected: foo, bar');
         delete global.foo;
@@ -154,7 +156,7 @@ describe('Runner', function() {
       runner.checkGlobals(test);
     });
 
-    it('should respect per test whitelisted globals', function() {
+    it('should respect per test whitelisted globals', function () {
       var test = new Test('im a test about lions', noop);
       test.globals(['foo']);
 
@@ -170,7 +172,7 @@ describe('Runner', function() {
       delete global.foo;
     });
 
-    it('should respect per test whitelisted globals but still detect other leaks', function(done) {
+    it('should respect per test whitelisted globals but still detect other leaks', function (done) {
       var test = new Test('im a test about lions', noop);
       test.globals(['foo']);
 
@@ -178,7 +180,7 @@ describe('Runner', function() {
 
       global.foo = 'bar';
       global.bar = 'baz';
-      runner.on('fail', function(test, err) {
+      runner.on('fail', function (test, err) {
         test.title.should.equal('im a test about lions');
         err.message.should.equal('global leak detected: bar');
         delete global.foo;
@@ -187,32 +189,32 @@ describe('Runner', function() {
       runner.checkGlobals(test);
     });
 
-    it('should emit "fail" when a global beginning with d is introduced', function(done) {
+    it('should emit "fail" when a global beginning with d is introduced', function (done) {
       global.derp = 'bar';
-      runner.on('fail', function() {
+      runner.on('fail', function () {
         delete global.derp;
         done();
       });
-      runner.checkGlobals(new Test('herp', function() {}));
+      runner.checkGlobals(new Test('herp', function () {}));
     });
   });
 
-  describe('.hook(name, fn)', function() {
-    it('should execute hooks after failed test if suite bail is true', function(done) {
+  describe('.hook(name, fn)', function () {
+    it('should execute hooks after failed test if suite bail is true', function (done) {
       runner.fail(new Test('failed test', noop));
       suite.bail(true);
-      suite.afterEach(function() {
-        suite.afterAll(function() {
+      suite.afterEach(function () {
+        suite.afterAll(function () {
           done();
         });
       });
-      runner.hook('afterEach', function() {});
-      runner.hook('afterAll', function() {});
+      runner.hook('afterEach', function () {});
+      runner.hook('afterAll', function () {});
     });
   });
 
-  describe('.fail(test, err)', function() {
-    it('should increment .failures', function() {
+  describe('.fail(test, err)', function () {
+    it('should increment .failures', function () {
       runner.failures.should.equal(0);
       runner.fail(new Test('one', noop), {});
       runner.failures.should.equal(1);
@@ -220,16 +222,16 @@ describe('Runner', function() {
       runner.failures.should.equal(2);
     });
 
-    it('should set test.state to "failed"', function() {
+    it('should set test.state to "failed"', function () {
       var test = new Test('some test', noop);
       runner.fail(test, 'some error');
       test.state.should.equal('failed');
     });
 
-    it('should emit "fail"', function(done) {
+    it('should emit "fail"', function (done) {
       var test = new Test('some other test', noop);
       var err = {};
-      runner.on('fail', function(test, err) {
+      runner.on('fail', function (test, err) {
         test.should.equal(test);
         err.should.equal(err);
         done();
@@ -237,53 +239,53 @@ describe('Runner', function() {
       runner.fail(test, err);
     });
 
-    it('should emit a helpful message when failed with a string', function(done) {
+    it('should emit a helpful message when failed with a string', function (done) {
       var test = new Test('helpful test', noop);
       var err = 'string';
-      runner.on('fail', function(test, err) {
+      runner.on('fail', function (test, err) {
         err.message.should.equal('the string "string" was thrown, throw an Error :)');
         done();
       });
       runner.fail(test, err);
     });
 
-    it('should emit a the error when failed with an Error instance', function(done) {
+    it('should emit a the error when failed with an Error instance', function (done) {
       var test = new Test('a test', noop);
       var err = new Error('an error message');
-      runner.on('fail', function(test, err) {
+      runner.on('fail', function (test, err) {
         err.message.should.equal('an error message');
         done();
       });
       runner.fail(test, err);
     });
 
-    it('should emit the error when failed with an Error-like object', function(done) {
+    it('should emit the error when failed with an Error-like object', function (done) {
       var test = new Test('a test', noop);
       var err = { message: 'an error message' };
-      runner.on('fail', function(test, err) {
+      runner.on('fail', function (test, err) {
         err.message.should.equal('an error message');
         done();
       });
       runner.fail(test, err);
     });
 
-    it('should emit a helpful message when failed with an Object', function(done) {
+    it('should emit a helpful message when failed with an Object', function (done) {
       var test = new Test('a test', noop);
       var err = { x: 1 };
-      runner.on('fail', function(test, err) {
+      runner.on('fail', function (test, err) {
         err.message.should.equal('the object {\n  "x": 1\n} was thrown, throw an Error :)');
         done();
       });
       runner.fail(test, err);
     });
 
-    it('should emit a helpful message when failed with an Array', function(done) {
+    it('should emit a helpful message when failed with an Array', function (done) {
       var test = new Test('a test', noop);
       var err = [
         1,
         2
       ];
-      runner.on('fail', function(test, err) {
+      runner.on('fail', function (test, err) {
         err.message.should.equal('the array [\n  1\n  2\n] was thrown, throw an Error :)');
         done();
       });
@@ -291,8 +293,8 @@ describe('Runner', function() {
     });
   });
 
-  describe('.failHook(hook, err)', function() {
-    it('should increment .failures', function() {
+  describe('.failHook(hook, err)', function () {
+    it('should increment .failures', function () {
       runner.failures.should.equal(0);
       runner.failHook(new Test('fail hook 1', noop), {});
       runner.failures.should.equal(1);
@@ -300,7 +302,7 @@ describe('Runner', function() {
       runner.failures.should.equal(2);
     });
 
-    it('should augment hook title with current test title', function() {
+    it('should augment hook title with current test title', function () {
       var hook = new Hook('"before each" hook');
       hook.ctx = { currentTest: new Test('should behave', noop) };
 
@@ -312,10 +314,10 @@ describe('Runner', function() {
       hook.title.should.equal('"before each" hook for "should obey"');
     });
 
-    it('should emit "fail"', function(done) {
+    it('should emit "fail"', function (done) {
       var hook = new Hook();
       var err = {};
-      runner.on('fail', function(hook, err) {
+      runner.on('fail', function (hook, err) {
         hook.should.equal(hook);
         err.should.equal(err);
         done();
@@ -323,7 +325,7 @@ describe('Runner', function() {
       runner.failHook(hook, err);
     });
 
-    it('should emit "end" if suite bail is true', function(done) {
+    it('should emit "end" if suite bail is true', function (done) {
       var hook = new Hook();
       var err = {};
       suite.bail(true);
@@ -331,11 +333,11 @@ describe('Runner', function() {
       runner.failHook(hook, err);
     });
 
-    it('should not emit "end" if suite bail is not true', function(done) {
+    it('should not emit "end" if suite bail is not true', function (done) {
       var hook = new Hook();
       var err = {};
       suite.bail(false);
-      runner.on('end', function() {
+      runner.on('end', function () {
         throw new Error('"end" was emit, but the bail is false');
       });
       runner.failHook(hook, err);
@@ -343,14 +345,14 @@ describe('Runner', function() {
     });
   });
 
-  describe('allowUncaught', function() {
-    it('should allow unhandled errors to propagate through', function(done) {
+  describe('allowUncaught', function () {
+    it('should allow unhandled errors to propagate through', function (done) {
       var newRunner = new Runner(suite);
       newRunner.allowUncaught = true;
-      newRunner.test = new Test('failing test', function() {
+      newRunner.test = new Test('failing test', function () {
         throw new Error('allow unhandled errors');
       });
-      function fail() {
+      function fail () {
         newRunner.runTest();
       }
       fail.should.throw('allow unhandled errors');
@@ -358,7 +360,7 @@ describe('Runner', function() {
     });
   });
 
-  describe('stackTrace', function() {
+  describe('stackTrace', function () {
     var stack = [
       'AssertionError: foo bar',
       'at EventEmitter.<anonymous> (/usr/local/dev/test.js:16:12)',
@@ -373,20 +375,20 @@ describe('Runner', function() {
       'at processImmediate [as _immediateCallback] (timers.js:321:17)'
     ];
 
-    describe('shortStackTrace', function() {
-      beforeEach(function() {
+    describe('shortStackTrace', function () {
+      beforeEach(function () {
         if (path.sep !== '/') {
           this.skip();
         }
       });
 
-      it('should prettify the stack-trace', function(done) {
+      it('should prettify the stack-trace', function (done) {
         var hook = new Hook();
         var err = new Error();
         // Fake stack-trace
         err.stack = stack.join('\n');
 
-        runner.on('fail', function(hook, err) {
+        runner.on('fail', function (hook, err) {
           err.stack.should.equal(stack.slice(0, 3).join('\n'));
           done();
         });
@@ -394,14 +396,14 @@ describe('Runner', function() {
       });
     });
 
-    describe('longStackTrace', function() {
-      beforeEach(function() {
+    describe('longStackTrace', function () {
+      beforeEach(function () {
         if (path.sep !== '/') {
           this.skip();
         }
       });
 
-      it('should display the full stack-trace', function(done) {
+      it('should display the full stack-trace', function (done) {
         var hook = new Hook();
         var err = new Error();
         // Fake stack-trace
@@ -409,7 +411,7 @@ describe('Runner', function() {
         // Add --stack-trace option
         runner.fullStackTrace = true;
 
-        runner.on('fail', function(hook, err) {
+        runner.on('fail', function (hook, err) {
           err.stack.should.equal(stack.join('\n'));
           done();
         });
diff --git a/test/sanity/sanity.spec.js b/test/sanity/sanity.spec.js
index 59d5896515..b918f1c4f9 100644
--- a/test/sanity/sanity.spec.js
+++ b/test/sanity/sanity.spec.js
@@ -2,8 +2,8 @@
 
 var assert = require('assert');
 
-describe('a production installation of Mocha', function() {
-  it('should be able to execute a test', function() {
+describe('a production installation of Mocha', function () {
+  it('should be able to execute a test', function () {
     assert.ok(true);
   });
 });
diff --git a/test/setup.js b/test/setup.js
new file mode 100644
index 0000000000..0ffe34c7e5
--- /dev/null
+++ b/test/setup.js
@@ -0,0 +1,4 @@
+'use strict';
+
+global.expect = require('expect.js');
+global.assert = require('assert');
diff --git a/test/suite.spec.js b/test/suite.spec.js
index 54a1acd667..4cb62dd290 100644
--- a/test/suite.spec.js
+++ b/test/suite.spec.js
@@ -1,11 +1,12 @@
-var mocha = require('../')
-  , Context = mocha.Context
-  , Suite = mocha.Suite
-  , Test = mocha.Test;
-
-describe('Suite', function(){
-  describe('.clone()', function(){
-    beforeEach(function(){
+'use strict';
+
+var mocha = require('../');
+var Suite = mocha.Suite;
+var Test = mocha.Test;
+
+describe('Suite', function () {
+  describe('.clone()', function () {
+    beforeEach(function () {
       this.suite = new Suite('To be cloned');
       this.suite._timeout = 3043;
       this.suite._slow = 101;
@@ -18,120 +19,120 @@ describe('Suite', function(){
       this.suite._afterAll.push(5);
     });
 
-    it('should copy the title', function(){
+    it('should copy the title', function () {
       this.suite.clone().title.should.equal('To be cloned');
     });
 
-    it('should copy the timeout value', function(){
+    it('should copy the timeout value', function () {
       this.suite.clone().timeout().should.equal(3043);
     });
 
-    it('should copy the slow value', function(){
+    it('should copy the slow value', function () {
       this.suite.clone().slow().should.equal(101);
     });
 
-    it('should copy the bail value', function(){
+    it('should copy the bail value', function () {
       this.suite.clone().bail().should.be.true();
     });
 
-    it('should not copy the values from the suites array', function(){
+    it('should not copy the values from the suites array', function () {
       this.suite.clone().suites.should.be.empty();
     });
 
-    it('should not copy the values from the tests array', function(){
+    it('should not copy the values from the tests array', function () {
       this.suite.clone().tests.should.be.empty();
     });
 
-    it('should not copy the values from the _beforeEach array', function(){
+    it('should not copy the values from the _beforeEach array', function () {
       this.suite.clone()._beforeEach.should.be.empty();
     });
 
-    it('should not copy the values from the _beforeAll array', function(){
+    it('should not copy the values from the _beforeAll array', function () {
       this.suite.clone()._beforeAll.should.be.empty();
     });
 
-    it('should not copy the values from the _afterEach array', function(){
+    it('should not copy the values from the _afterEach array', function () {
       this.suite.clone()._afterEach.should.be.empty();
     });
 
-    it('should not copy the values from the _afterAll array', function(){
+    it('should not copy the values from the _afterAll array', function () {
       this.suite.clone()._afterAll.should.be.empty();
     });
   });
 
-  describe('.timeout()', function(){
-    beforeEach(function(){
+  describe('.timeout()', function () {
+    beforeEach(function () {
       this.suite = new Suite('A Suite');
     });
 
-    describe('when no argument is passed', function(){
-      it('should return the timeout value', function(){
+    describe('when no argument is passed', function () {
+      it('should return the timeout value', function () {
         this.suite.timeout().should.equal(2000);
       });
     });
 
-    describe('when argument is passed', function(){
-      it('should return the Suite object', function(){
+    describe('when argument is passed', function () {
+      it('should return the Suite object', function () {
         var newSuite = this.suite.timeout(5000);
         newSuite.timeout().should.equal(5000);
       });
     });
   });
 
-  describe('.slow()', function(){
-    beforeEach(function(){
+  describe('.slow()', function () {
+    beforeEach(function () {
       this.suite = new Suite('A Suite');
     });
 
-    describe('when given a string', function(){
-      it('should parse it', function(){
+    describe('when given a string', function () {
+      it('should parse it', function () {
         this.suite.slow('5 seconds');
         this.suite.slow().should.equal(5000);
-      })
-    })
+      });
+    });
 
-    describe('when no argument is passed', function(){
-      it('should return the slow value', function(){
+    describe('when no argument is passed', function () {
+      it('should return the slow value', function () {
         this.suite.slow().should.equal(75);
       });
     });
 
-    describe('when argument is passed', function(){
-      it('should return the Suite object', function(){
+    describe('when argument is passed', function () {
+      it('should return the Suite object', function () {
         var newSuite = this.suite.slow(5000);
         newSuite.slow().should.equal(5000);
       });
     });
   });
 
-  describe('.bail()', function(){
-    beforeEach(function(){
+  describe('.bail()', function () {
+    beforeEach(function () {
       this.suite = new Suite('A Suite');
-      this.suite._bail = true
+      this.suite._bail = true;
     });
 
-    describe('when no argument is passed', function(){
-      it('should return the bail value', function(){
+    describe('when no argument is passed', function () {
+      it('should return the bail value', function () {
         this.suite.bail().should.be.true();
       });
     });
 
-    describe('when argument is passed', function(){
-      it('should return the Suite object', function(){
+    describe('when argument is passed', function () {
+      it('should return the Suite object', function () {
         var newSuite = this.suite.bail(false);
         newSuite.bail().should.be.false();
       });
     });
   });
 
-  describe('.beforeAll()', function(){
-    beforeEach(function(){
+  describe('.beforeAll()', function () {
+    beforeEach(function () {
       this.suite = new Suite('A Suite');
     });
 
-    describe('wraps the passed in function in a Hook', function(){
-      it('adds it to _beforeAll', function(){
-        var fn = function(){};
+    describe('wraps the passed in function in a Hook', function () {
+      it('adds it to _beforeAll', function () {
+        var fn = function () {};
         this.suite.beforeAll(fn);
 
         this.suite._beforeAll.should.have.length(1);
@@ -140,8 +141,8 @@ describe('Suite', function(){
         beforeAllItem.fn.should.equal(fn);
       });
 
-      it('appends title to hook', function(){
-        var fn = function(){};
+      it('appends title to hook', function () {
+        var fn = function () {};
         this.suite.beforeAll('test', fn);
 
         this.suite._beforeAll.should.have.length(1);
@@ -149,7 +150,7 @@ describe('Suite', function(){
         beforeAllItem.title.should.equal('"before all" hook: test');
         beforeAllItem.fn.should.equal(fn);
 
-        function namedFn(){}
+        function namedFn () {}
         this.suite.beforeAll(namedFn);
         this.suite._beforeAll.should.have.length(2);
         beforeAllItem = this.suite._beforeAll[1];
@@ -159,14 +160,14 @@ describe('Suite', function(){
     });
   });
 
-  describe('.afterAll()', function(){
-    beforeEach(function(){
+  describe('.afterAll()', function () {
+    beforeEach(function () {
       this.suite = new Suite('A Suite');
     });
 
-    describe('wraps the passed in function in a Hook', function(){
-      it('adds it to _afterAll', function(){
-        var fn = function(){};
+    describe('wraps the passed in function in a Hook', function () {
+      it('adds it to _afterAll', function () {
+        var fn = function () {};
         this.suite.afterAll(fn);
 
         this.suite._afterAll.should.have.length(1);
@@ -174,8 +175,8 @@ describe('Suite', function(){
         afterAllItem.title.should.match(/^"after all" hook/);
         afterAllItem.fn.should.equal(fn);
       });
-      it('appends title to hook', function(){
-        var fn = function(){};
+      it('appends title to hook', function () {
+        var fn = function () {};
         this.suite.afterAll('test', fn);
 
         this.suite._afterAll.should.have.length(1);
@@ -183,7 +184,7 @@ describe('Suite', function(){
         beforeAllItem.title.should.equal('"after all" hook: test');
         beforeAllItem.fn.should.equal(fn);
 
-        function namedFn(){}
+        function namedFn () {}
         this.suite.afterAll(namedFn);
         this.suite._afterAll.should.have.length(2);
         beforeAllItem = this.suite._afterAll[1];
@@ -193,14 +194,14 @@ describe('Suite', function(){
     });
   });
 
-  describe('.beforeEach()', function(){
-    beforeEach(function(){
+  describe('.beforeEach()', function () {
+    beforeEach(function () {
       this.suite = new Suite('A Suite');
     });
 
-    describe('wraps the passed in function in a Hook', function(){
-      it('adds it to _beforeEach', function(){
-        var fn = function(){};
+    describe('wraps the passed in function in a Hook', function () {
+      it('adds it to _beforeEach', function () {
+        var fn = function () {};
         this.suite.beforeEach(fn);
 
         this.suite._beforeEach.should.have.length(1);
@@ -209,8 +210,8 @@ describe('Suite', function(){
         beforeEachItem.fn.should.equal(fn);
       });
 
-      it('appends title to hook', function(){
-        var fn = function(){};
+      it('appends title to hook', function () {
+        var fn = function () {};
         this.suite.beforeEach('test', fn);
 
         this.suite._beforeEach.should.have.length(1);
@@ -218,7 +219,7 @@ describe('Suite', function(){
         beforeAllItem.title.should.equal('"before each" hook: test');
         beforeAllItem.fn.should.equal(fn);
 
-        function namedFn(){}
+        function namedFn () {}
         this.suite.beforeEach(namedFn);
         this.suite._beforeEach.should.have.length(2);
         beforeAllItem = this.suite._beforeEach[1];
@@ -228,14 +229,14 @@ describe('Suite', function(){
     });
   });
 
-  describe('.afterEach()', function(){
-    beforeEach(function(){
+  describe('.afterEach()', function () {
+    beforeEach(function () {
       this.suite = new Suite('A Suite');
     });
 
-    describe('wraps the passed in function in a Hook', function(){
-      it('adds it to _afterEach', function(){
-        var fn = function(){};
+    describe('wraps the passed in function in a Hook', function () {
+      it('adds it to _afterEach', function () {
+        var fn = function () {};
         this.suite.afterEach(fn);
 
         this.suite._afterEach.should.have.length(1);
@@ -244,8 +245,8 @@ describe('Suite', function(){
         afterEachItem.fn.should.equal(fn);
       });
 
-      it('appends title to hook', function(){
-        var fn = function(){};
+      it('appends title to hook', function () {
+        var fn = function () {};
         this.suite.afterEach('test', fn);
 
         this.suite._afterEach.should.have.length(1);
@@ -253,7 +254,7 @@ describe('Suite', function(){
         beforeAllItem.title.should.equal('"after each" hook: test');
         beforeAllItem.fn.should.equal(fn);
 
-        function namedFn(){}
+        function namedFn () {}
         this.suite.afterEach(namedFn);
         this.suite._afterEach.should.have.length(2);
         beforeAllItem = this.suite._afterEach[1];
@@ -263,8 +264,8 @@ describe('Suite', function(){
     });
   });
 
-  describe('.addSuite()', function(){
-    beforeEach(function(){
+  describe('.addSuite()', function () {
+    beforeEach(function () {
       this.first = new Suite('First suite');
       this.first.timeout(4002);
       this.first.slow(200);
@@ -272,26 +273,26 @@ describe('Suite', function(){
       this.first.addSuite(this.second);
     });
 
-    it('sets the parent on the added Suite', function(){
+    it('sets the parent on the added Suite', function () {
       this.second.parent.should.equal(this.first);
     });
 
-    it('copies the timeout value', function(){
+    it('copies the timeout value', function () {
       this.second.timeout().should.equal(4002);
     });
 
-    it('copies the slow value', function(){
+    it('copies the slow value', function () {
       this.second.slow().should.equal(200);
     });
 
-    it('adds the suite to the suites collection', function(){
+    it('adds the suite to the suites collection', function () {
       this.first.suites.should.have.length(1);
       this.first.suites[0].should.equal(this.second);
     });
 
-    it('treats suite as pending if its parent is pending', function(){
-      this.first.pending = true
-      this.second.isPending.should.be.true
+    it('treats suite as pending if its parent is pending', function () {
+      this.first.pending = true;
+      this.second.isPending.should.be.true;
     });
   });
 
@@ -317,19 +318,19 @@ describe('Suite', function(){
   //   });
   // });
 
-  describe('.fullTitle()', function(){
-    beforeEach(function(){
+  describe('.fullTitle()', function () {
+    beforeEach(function () {
       this.suite = new Suite('A Suite');
     });
 
-    describe('when there is no parent', function(){
-      it('returns the suite title', function(){
+    describe('when there is no parent', function () {
+      it('returns the suite title', function () {
         this.suite.fullTitle().should.equal('A Suite');
       });
     });
 
-    describe('when there is a parent', function(){
-      it('returns the combination of parent\'s and suite\'s title', function(){
+    describe('when there is a parent', function () {
+      it('returns the combination of parent\'s and suite\'s title', function () {
         var parentSuite = new Suite('I am a parent');
         parentSuite.addSuite(this.suite);
         this.suite.fullTitle().should.equal('I am a parent A Suite');
@@ -337,19 +338,19 @@ describe('Suite', function(){
     });
   });
 
-  describe('.total()', function(){
-    beforeEach(function(){
+  describe('.total()', function () {
+    beforeEach(function () {
       this.suite = new Suite('A Suite');
     });
 
-    describe('when there are no nested suites or tests', function(){
-      it('should return 0', function(){
+    describe('when there are no nested suites or tests', function () {
+      it('should return 0', function () {
         this.suite.total().should.equal(0);
       });
     });
 
-    describe('when there are several tests in the suite', function(){
-      it('should return the number', function(){
+    describe('when there are several tests in the suite', function () {
+      it('should return the number', function () {
         this.suite.addTest(new Test('a child test'));
         this.suite.addTest(new Test('another child test'));
         this.suite.total().should.equal(2);
@@ -357,83 +358,83 @@ describe('Suite', function(){
     });
   });
 
-  describe('.eachTest(fn)', function(){
-    beforeEach(function(){
+  describe('.eachTest(fn)', function () {
+    beforeEach(function () {
       this.suite = new Suite('A Suite');
     });
 
-    describe('when there are no nested suites or tests', function(){
-      it('should return 0', function(){
+    describe('when there are no nested suites or tests', function () {
+      it('should return 0', function () {
         var n = 0;
-        function fn(){ n++; }
+        function fn () { n++; }
         this.suite.eachTest(fn);
         n.should.equal(0);
       });
     });
 
-    describe('when there are several tests in the suite', function(){
-      it('should return the number', function(){
+    describe('when there are several tests in the suite', function () {
+      it('should return the number', function () {
         this.suite.addTest(new Test('a child test'));
         this.suite.addTest(new Test('another child test'));
 
         var n = 0;
-        function fn(){ n++; }
+        function fn () { n++; }
         this.suite.eachTest(fn);
         n.should.equal(2);
       });
     });
 
-    describe('when there are several levels of nested suites', function(){
-      it('should return the number', function(){
+    describe('when there are several levels of nested suites', function () {
+      it('should return the number', function () {
         this.suite.addTest(new Test('a child test'));
         var suite = new Suite('a child suite');
         suite.addTest(new Test('a test in a child suite'));
         this.suite.addSuite(suite);
 
         var n = 0;
-        function fn(){ n++; }
+        function fn () { n++; }
         this.suite.eachTest(fn);
         n.should.equal(2);
       });
     });
-
   });
 
-  describe('initialization', function() {
-    it('should throw an error if the title isn\'t a string', function() {
-      (function() {
+  describe('initialization', function () {
+    /* eslint no-new: off */
+    it('should throw an error if the title isn\'t a string', function () {
+      (function () {
         new Suite(undefined, 'root');
       }).should.throw();
 
-      (function() {
-        new Suite(function(){}, 'root');
+      (function () {
+        new Suite(function () {}, 'root');
       }).should.throw();
     });
 
-    it('should not throw if the title is a string', function() {
-      (function() {
+    it('should not throw if the title is a string', function () {
+      (function () {
         new Suite('Bdd suite', 'root');
       }).should.not.throw();
     });
   });
 });
 
-describe('Test', function() {
-  describe('initialization', function() {
-    it('should throw an error if the title isn\'t a string', function() {
-      (function() {
-        new Test(function(){});
+describe('Test', function () {
+  describe('initialization', function () {
+    it('should throw an error if the title isn\'t a string', function () {
+      (function () {
+        new Test(function () {});
       }).should.throw();
 
-      (function() {
-        new Test(undefined, function(){});
+      (function () {
+        new Test(undefined, function () {});
       }).should.throw();
     });
 
-    it('should not throw if the title is a string', function() {
-      (function() {
-        new Test('test-case',  function(){});
+    it('should not throw if the title is a string', function () {
+      (function () {
+        new Test('test-case', function () {});
       }).should.not.throw();
     });
   });
-});
\ No newline at end of file
+});
diff --git a/test/test.spec.js b/test/test.spec.js
index 5dea7919db..73c09b3b06 100644
--- a/test/test.spec.js
+++ b/test/test.spec.js
@@ -1,11 +1,12 @@
-var mocha = require('../')
-  , should = require('should')
-  , Context = mocha.Context
-  , Test = mocha.Test;
+'use strict';
 
-describe('Test', function(){
-  describe('.clone()', function(){
-    beforeEach(function(){
+var mocha = require('../');
+var should = require('should');
+var Test = mocha.Test;
+
+describe('Test', function () {
+  describe('.clone()', function () {
+    beforeEach(function () {
       this._test = new Test('To be cloned', function () {});
       this._test._timeout = 3043;
       this._test._slow = 101;
@@ -17,59 +18,59 @@ describe('Test', function(){
       this._test.file = 'bar';
     });
 
-    it('should copy the title', function(){
+    it('should copy the title', function () {
       this._test.clone().title.should.equal('To be cloned');
     });
 
-    it('should copy the timeout value', function(){
+    it('should copy the timeout value', function () {
       this._test.clone().timeout().should.equal(3043);
     });
 
-    it('should copy the slow value', function(){
+    it('should copy the slow value', function () {
       this._test.clone().slow().should.equal(101);
     });
 
-    it('should copy the enableTimeouts value', function(){
+    it('should copy the enableTimeouts value', function () {
       this._test.clone().enableTimeouts().should.be.true();
     });
 
-    it('should copy the retries value', function(){
+    it('should copy the retries value', function () {
       this._test.clone().retries().should.equal(3);
     });
 
-    it('should copy the currentRetry value', function(){
+    it('should copy the currentRetry value', function () {
       this._test.clone().currentRetry().should.equal(1);
     });
 
-    it('should copy the globals value', function(){
+    it('should copy the globals value', function () {
       this._test.clone().globals().should.not.be.empty();
     });
 
-    it('should copy the parent value', function(){
+    it('should copy the parent value', function () {
       this._test.clone().parent.should.equal('foo');
     });
 
-    it('should copy the file value', function(){
+    it('should copy the file value', function () {
       this._test.clone().file.should.equal('bar');
     });
   });
 
-  describe('.isPending()', function(){
-    beforeEach(function(){
+  describe('.isPending()', function () {
+    beforeEach(function () {
       this._test = new Test('Is it skipped', function () {});
     });
 
-    it('should not be pending by default', function(){
+    it('should not be pending by default', function () {
       should(this._test.isPending()).not.be.ok();
     });
 
-    it('should be pending when marked as such', function(){
+    it('should be pending when marked as such', function () {
       this._test.pending = true;
       should(this._test.isPending()).be.ok();
     });
 
-    it('should be pending when its parent is pending', function(){
-      this._test.parent = { isPending: function(){ return true } };
+    it('should be pending when its parent is pending', function () {
+      this._test.parent = { isPending: function () { return true; } };
       should(this._test.isPending()).be.ok();
     });
   });
diff --git a/test/utils.spec.js b/test/utils.spec.js
index 4683809ae6..ccfd861a78 100644
--- a/test/utils.spec.js
+++ b/test/utils.spec.js
@@ -1,86 +1,88 @@
+'use strict';
+
 var mocha = require('..');
 var utils = mocha.utils;
 var path = require('path');
 var JSON = require('json3');
 
-describe('utils', function() {
-  describe('.clean()', function() {
+describe('utils', function () {
+  describe('.clean()', function () {
     var clean = utils.clean;
-    it('should remove the wrapping function declaration', function() {
+    it('should remove the wrapping function declaration', function () {
       clean('function  (one, two, three)  {\n//code\n}').should.equal('//code');
     });
 
-    it('should handle newlines in the function declaration', function() {
+    it('should handle newlines in the function declaration', function () {
       clean('function  (one, two, three)\n  {\n//code\n}').should.equal('//code');
     });
 
-    it('should remove space character indentation from the function body', function() {
+    it('should remove space character indentation from the function body', function () {
       clean('  //line1\n    //line2').should.equal('//line1\n  //line2');
     });
 
-    it('should remove tab character indentation from the function body', function() {
+    it('should remove tab character indentation from the function body', function () {
       clean('\t//line1\n\t\t//line2').should.equal('//line1\n\t//line2');
     });
 
-    it('should handle functions with tabs in their declarations', function() {
+    it('should handle functions with tabs in their declarations', function () {
       clean('function\t(\t)\t{\n//code\n}').should.equal('//code');
     });
 
-    it('should handle named functions without space after name', function() {
+    it('should handle named functions without space after name', function () {
       clean('function withName() {\n//code\n}').should.equal('//code');
     });
 
-    it('should handle named functions with space after name', function() {
+    it('should handle named functions with space after name', function () {
       clean('function withName () {\n//code\n}').should.equal('//code');
     });
 
-    it('should handle functions with no space between the end and the closing brace', function() {
+    it('should handle functions with no space between the end and the closing brace', function () {
       clean('function() {/*code*/}').should.equal('/*code*/');
     });
 
-    it('should handle functions with parentheses in the same line', function() {
+    it('should handle functions with parentheses in the same line', function () {
       clean('function() { if (true) { /* code */ } }').should.equal('if (true) { /* code */ }');
     });
 
-    it('should handle empty functions', function() {
+    it('should handle empty functions', function () {
       clean('function() {}').should.equal('');
     });
   });
 
-  describe('.isBuffer()', function() {
+  describe('.isBuffer()', function () {
     var isBuffer = utils.isBuffer;
-    it('should test if object is a Buffer', function() {
+    it('should test if object is a Buffer', function () {
       isBuffer(new Buffer([0x01])).should.equal(true);
       isBuffer({}).should.equal(false);
-    })
+    });
   });
 
-  describe('.map()', function() {
+  describe('.map()', function () {
     var map = utils.map;
-    it('should behave same as Array.prototype.map', function() {
+    it('should behave same as Array.prototype.map', function () {
       var arr = [1, 2, 3];
       map(arr, JSON.stringify).should.eql(arr.map(JSON.stringify));
     });
 
-    it('should call the callback with 3 arguments[currentValue, index, array]', function() {
+    it('should call the callback with 3 arguments[currentValue, index, array]', function () {
       var index = 0;
-      map([1, 2, 3], function(e, i, arr) {
+      map([1, 2, 3], function (e, i, arr) {
         e.should.equal(arr[index]);
         i.should.equal(index++);
-      })
+      });
     });
 
-    it('should apply with the given scope', function() {
+    it('should apply with the given scope', function () {
       var scope = {};
-      map(['a', 'b', 'c'], function() {
+      map(['a', 'b', 'c'], function () {
         this.should.equal(scope);
       }, scope);
     });
   });
 
-  describe('.parseQuery()', function() {
+  describe('.parseQuery()', function () {
     var parseQuery = utils.parseQuery;
-    it('should get queryString and return key-value object', function() {
+    it('should get queryString and return key-value object', function () {
       parseQuery('?foo=1&bar=2&baz=3').should.eql({
         foo: '1',
         bar: '2',
@@ -92,11 +94,11 @@ describe('utils', function() {
         r2: 'm{2}',
         r3: '^co.*'
       });
-    })
+    });
   });
 
-  describe('.stackTraceFilter()', function() {
-    describe('on node', function() {
+  describe('.stackTraceFilter()', function () {
+    describe('on node', function () {
       var filter = utils.stackTraceFilter();
 
       describe('on POSIX OS', function () {
@@ -187,7 +189,7 @@ describe('utils', function() {
         });
       });
 
-      describe('on Windows', function() {
+      describe('on Windows', function () {
         before(function () {
           if (path.sep === '/') {
             this.skip();
@@ -215,44 +217,46 @@ describe('utils', function() {
       });
     });
 
-    describe('on browser', function() {
+    describe('on browser', function () {
       var filter;
-      before(function() {
+      before(function () {
         global.document = true;
         global.location = { href: 'localhost:3000/foo/bar/index.html' };
         filter = utils.stackTraceFilter();
       });
-      it('does not strip out other bower_components', function() {
-        var stack = ['Error: failed'
-          , 'at assert (index.html:11:26)'
-          , 'at Context.<anonymous> (test.js:17:18)'
-          , 'at bower_components/should/should.js:4827:7'
-          , 'at next (bower_components/should/should.js:4766:23)'
-          , 'at components/should/5.0.0/should.js:4827:7'
-          , 'at next (components/should/5.0.0/should.js:4766:23)'
-          , 'at Runner.require.register.Runner.runTest (node_modules/mocha.js:4892:10)'
-          , 'at localhost:3000/foo/bar/node_modules/mocha.js:4970:12'
-          , 'at next (node_modules/mocha.js:4817:14)'];
-        filter(stack.join('\n')).should.equal(stack.slice(0,7).join('\n'));
+      it('does not strip out other bower_components', function () {
+        var stack = [
+          'Error: failed',
+          'at assert (index.html:11:26)',
+          'at Context.<anonymous> (test.js:17:18)',
+          'at bower_components/should/should.js:4827:7',
+          'at next (bower_components/should/should.js:4766:23)',
+          'at components/should/5.0.0/should.js:4827:7',
+          'at next (components/should/5.0.0/should.js:4766:23)',
+          'at Runner.require.register.Runner.runTest (node_modules/mocha.js:4892:10)',
+          'at localhost:3000/foo/bar/node_modules/mocha.js:4970:12',
+          'at next (node_modules/mocha.js:4817:14)'
+        ];
+        filter(stack.join('\n')).should.equal(stack.slice(0, 7).join('\n'));
       });
 
-      after(function() {
+      after(function () {
         delete global.document;
         delete global.location;
       });
     });
   });
 
-  describe('.isPromise', function() {
-    it('should return true if the value is Promise-ish', function() {
-      utils.isPromise({then: function() {}}).should.be.true;
+  describe('.isPromise', function () {
+    it('should return true if the value is Promise-ish', function () {
+      utils.isPromise({then: function () {}}).should.be.true;
     });
 
-    it('should return false if the value is not an object', function() {
+    it('should return false if the value is not an object', function () {
       utils.isPromise(1).should.be.false;
     });
 
-    it('should return false if the value is an object w/o a "then" function', function() {
+    it('should return false if the value is an object w/o a "then" function', function () {
       utils.isPromise({}).should.be.false;
     });
   });