diff --git a/lib/checks/aria/aria-valid-attr-evaluate.js b/lib/checks/aria/aria-valid-attr-evaluate.js
index e55fdfa855..0e6cba5726 100644
--- a/lib/checks/aria/aria-valid-attr-evaluate.js
+++ b/lib/checks/aria/aria-valid-attr-evaluate.js
@@ -2,7 +2,7 @@ import { validateAttr } from '../../commons/aria';
 import { getNodeAttributes } from '../../core/utils';
 
 function ariaValidAttrEvaluate(node, options) {
-	options = Array.isArray(options) ? options : [];
+	options = Array.isArray(options.value) ? options.value : [];
 
 	var invalid = [],
 		aria = /^aria-/;
diff --git a/lib/checks/aria/aria-valid-attr-value-evaluate.js b/lib/checks/aria/aria-valid-attr-value-evaluate.js
index 8c4652de9f..7eb3606b90 100644
--- a/lib/checks/aria/aria-valid-attr-value-evaluate.js
+++ b/lib/checks/aria/aria-valid-attr-value-evaluate.js
@@ -2,7 +2,7 @@ import { validateAttrValue } from '../../commons/aria';
 import { getNodeAttributes } from '../../core/utils';
 
 function ariaValidAttrValueEvaluate(node, options) {
-	options = Array.isArray(options) ? options : [];
+	options = Array.isArray(options.value) ? options.value : [];
 
 	let needsReview = '';
 	let messageKey = '';
diff --git a/lib/checks/language/valid-lang-evaluate.js b/lib/checks/language/valid-lang-evaluate.js
index f0bf969c74..fd2c7a1fd6 100644
--- a/lib/checks/language/valid-lang-evaluate.js
+++ b/lib/checks/language/valid-lang-evaluate.js
@@ -3,7 +3,7 @@ import { validLangs, getBaseLang } from '../../core/utils';
 function validLangEvaluate(node, options) {
 	var langs, invalid;
 
-	langs = (options ? options : validLangs()).map(getBaseLang);
+	langs = (options.value ? options.value : validLangs()).map(getBaseLang);
 
 	invalid = ['lang', 'xml:lang'].reduce(function(invalid, langAttr) {
 		var langVal = node.getAttribute(langAttr);
diff --git a/lib/core/base/check.js b/lib/core/base/check.js
index 6de157e14b..113eae2a75 100644
--- a/lib/core/base/check.js
+++ b/lib/core/base/check.js
@@ -14,6 +14,19 @@ export function createExecutionContext(spec) {
 	return spec;
 }
 
+/**
+ * Normalize check options to always be an object.
+ * @param {Object} options
+ * @return Object
+ */
+function normalizeOptions(options = {}) {
+	if (Array.isArray(options) || typeof options !== 'object') {
+		options = { value: options };
+	}
+
+	return options;
+}
+
 function Check(spec) {
 	if (spec) {
 		this.id = spec.id;
@@ -65,15 +78,15 @@ Check.prototype.enabled = true;
 Check.prototype.run = function(node, options, context, resolve, reject) {
 	'use strict';
 	options = options || {};
-	var enabled = options.hasOwnProperty('enabled')
-			? options.enabled
-			: this.enabled,
-		checkOptions = options.options || this.options;
+	const enabled = options.hasOwnProperty('enabled')
+		? options.enabled
+		: this.enabled;
+	const checkOptions = this.getOptions(options.options);
 
 	if (enabled) {
-		var checkResult = new CheckResult(this);
-		var helper = checkHelper(checkResult, options, resolve, reject);
-		var result;
+		const checkResult = new CheckResult(this);
+		const helper = checkHelper(checkResult, options, resolve, reject);
+		let result;
 
 		try {
 			result = this.evaluate.call(
@@ -118,7 +131,7 @@ Check.prototype.runSync = function(node, options, context) {
 		return null;
 	}
 
-	const checkOptions = options.options || this.options;
+	const checkOptions = this.getOptions(options.options);
 	const checkResult = new CheckResult(this);
 	const helper = checkHelper(checkResult, options);
 
@@ -160,13 +173,21 @@ Check.prototype.runSync = function(node, options, context) {
  */
 
 Check.prototype.configure = function(spec) {
-	['options', 'enabled']
-		.filter(prop => spec.hasOwnProperty(prop))
-		.forEach(prop => (this[prop] = spec[prop]));
+	if (spec.hasOwnProperty('enabled')) {
+		this.enabled = spec.enabled;
+	}
+
+	if (spec.hasOwnProperty('options')) {
+		this.options = normalizeOptions(spec.options);
+	}
 
 	['evaluate', 'after']
 		.filter(prop => spec.hasOwnProperty(prop))
 		.forEach(prop => (this[prop] = createExecutionContext(spec[prop])));
 };
 
+Check.prototype.getOptions = function getOptions(options = {}) {
+	return Object.assign({}, this.options, normalizeOptions(options));
+};
+
 export default Check;
diff --git a/test/checks/aria/allowed-attr.js b/test/checks/aria/allowed-attr.js
index feabbf23bb..1af49c659c 100644
--- a/test/checks/aria/allowed-attr.js
+++ b/test/checks/aria/allowed-attr.js
@@ -18,7 +18,9 @@ describe('aria-allowed-attr', function() {
 		fixture.appendChild(node);
 
 		assert.isFalse(
-			checks['aria-allowed-attr'].evaluate.call(checkContext, node)
+			axe.testUtils
+				.getCheckEvaluate('aria-allowed-attr')
+				.call(checkContext, node)
 		);
 		assert.deepEqual(checkContext._data, ['aria-selected="true"']);
 	});
@@ -32,7 +34,9 @@ describe('aria-allowed-attr', function() {
 		fixture.appendChild(node);
 
 		assert.isTrue(
-			checks['aria-allowed-attr'].evaluate.call(checkContext, node)
+			axe.testUtils
+				.getCheckEvaluate('aria-allowed-attr')
+				.call(checkContext, node)
 		);
 	});
 
@@ -45,7 +49,9 @@ describe('aria-allowed-attr', function() {
 		fixture.appendChild(node);
 
 		assert.isFalse(
-			checks['aria-allowed-attr'].evaluate.call(checkContext, node)
+			axe.testUtils
+				.getCheckEvaluate('aria-allowed-attr')
+				.call(checkContext, node)
 		);
 		assert.deepEqual(checkContext._data, ['aria-selected="true"']);
 	});
@@ -59,7 +65,9 @@ describe('aria-allowed-attr', function() {
 		fixture.appendChild(node);
 
 		assert.isTrue(
-			checks['aria-allowed-attr'].evaluate.call(checkContext, node)
+			axe.testUtils
+				.getCheckEvaluate('aria-allowed-attr')
+				.call(checkContext, node)
 		);
 		assert.isNull(checkContext._data);
 	});
@@ -73,7 +81,9 @@ describe('aria-allowed-attr', function() {
 		fixture.appendChild(node);
 
 		assert.isTrue(
-			checks['aria-allowed-attr'].evaluate.call(checkContext, node)
+			axe.testUtils
+				.getCheckEvaluate('aria-allowed-attr')
+				.call(checkContext, node)
 		);
 		assert.isNull(checkContext._data);
 	});
@@ -88,7 +98,9 @@ describe('aria-allowed-attr', function() {
 		fixture.appendChild(node);
 
 		assert.isTrue(
-			checks['aria-allowed-attr'].evaluate.call(checkContext, node)
+			axe.testUtils
+				.getCheckEvaluate('aria-allowed-attr')
+				.call(checkContext, node)
 		);
 		assert.isNull(checkContext._data);
 	});
@@ -108,9 +120,11 @@ describe('aria-allowed-attr', function() {
 				'<div role="mccheddarton" id="target" aria-checked="true" aria-snuggles="true"></div>';
 			var target = fixture.children[0];
 			assert.isTrue(
-				checks['aria-allowed-attr'].evaluate.call(checkContext, target, {
-					mccheddarton: ['aria-checked', 'aria-snuggles']
-				})
+				axe.testUtils
+					.getCheckEvaluate('aria-allowed-attr')
+					.call(checkContext, target, {
+						mccheddarton: ['aria-checked', 'aria-snuggles']
+					})
 			);
 			delete axe.commons.aria.lookupTable.role.mccheddarton;
 		});
@@ -142,7 +156,9 @@ describe('aria-allowed-attr', function() {
 				bagley: ['aria-snuggles2']
 			};
 			assert.isTrue(
-				checks['aria-allowed-attr'].evaluate.call(checkContext, target, options)
+				axe.testUtils
+					.getCheckEvaluate('aria-allowed-attr')
+					.call(checkContext, target, options)
 			);
 			delete axe.commons.aria.lookupTable.role.mccheddarton;
 			delete axe.commons.aria.lookupTable.role.bagley;
diff --git a/test/checks/aria/aria-allowed-role.js b/test/checks/aria/aria-allowed-role.js
index 00bda342d5..357a1cb143 100644
--- a/test/checks/aria/aria-allowed-role.js
+++ b/test/checks/aria/aria-allowed-role.js
@@ -18,11 +18,9 @@ describe('aria-allowed-role', function() {
 		var options = {
 			ignoredTags: ['article']
 		};
-		var actual = checks['aria-allowed-role'].evaluate.call(
-			checkContext,
-			node,
-			options
-		);
+		var actual = axe.testUtils
+			.getCheckEvaluate('aria-allowed-role')
+			.call(checkContext, node, options);
 		var expected = true;
 		assert.equal(actual, expected);
 		assert.isNull(checkContext._data, null);
@@ -36,11 +34,9 @@ describe('aria-allowed-role', function() {
 		var options = {
 			allowImplicit: false
 		};
-		var actual = checks['aria-allowed-role'].evaluate.call(
-			checkContext,
-			target,
-			options
-		);
+		var actual = axe.testUtils
+			.getCheckEvaluate('aria-allowed-role')
+			.call(checkContext, target, options);
 		var expected = false;
 		assert.equal(actual, expected);
 		assert.deepEqual(checkContext._data, ['row']);
@@ -51,7 +47,9 @@ describe('aria-allowed-role', function() {
 		fixture.appendChild(node);
 		flatTreeSetup(fixture);
 		assert.isTrue(
-			checks['aria-allowed-role'].evaluate.call(checkContext, node)
+			axe.testUtils
+				.getCheckEvaluate('aria-allowed-role')
+				.call(checkContext, node)
 		);
 	});
 
@@ -61,10 +59,9 @@ describe('aria-allowed-role', function() {
 			'role="presentation"></button>';
 		var target = fixture.querySelector('#target');
 		flatTreeSetup(fixture);
-		var actual = checks['aria-allowed-role'].evaluate.call(
-			checkContext,
-			target
-		);
+		var actual = axe.testUtils
+			.getCheckEvaluate('aria-allowed-role')
+			.call(checkContext, target);
 		assert.isUndefined(actual);
 	});
 
@@ -76,10 +73,9 @@ describe('aria-allowed-role', function() {
 			'</div>';
 		var target = fixture.querySelector('#target');
 		flatTreeSetup(fixture);
-		var actual = checks['aria-allowed-role'].evaluate.call(
-			checkContext,
-			target
-		);
+		var actual = axe.testUtils
+			.getCheckEvaluate('aria-allowed-role')
+			.call(checkContext, target);
 		assert.isUndefined(actual);
 	});
 
@@ -90,7 +86,9 @@ describe('aria-allowed-role', function() {
 		fixture.appendChild(node);
 		flatTreeSetup(fixture);
 		assert.isTrue(
-			checks['aria-allowed-role'].evaluate.call(checkContext, node)
+			axe.testUtils
+				.getCheckEvaluate('aria-allowed-role')
+				.call(checkContext, node)
 		);
 	});
 
@@ -100,12 +98,16 @@ describe('aria-allowed-role', function() {
 		fixture.appendChild(node);
 		flatTreeSetup(fixture);
 		assert.isTrue(
-			checks['aria-allowed-role'].evaluate.call(checkContext, node)
+			axe.testUtils
+				.getCheckEvaluate('aria-allowed-role')
+				.call(checkContext, node)
 		);
 		assert.deepEqual(checkContext._data, null);
 		node.setAttribute('role', 'none');
 		assert.isTrue(
-			checks['aria-allowed-role'].evaluate.call(checkContext, node)
+			axe.testUtils
+				.getCheckEvaluate('aria-allowed-role')
+				.call(checkContext, node)
 		);
 		assert.deepEqual(checkContext._data, null);
 	});
@@ -117,12 +119,16 @@ describe('aria-allowed-role', function() {
 		fixture.appendChild(node);
 		flatTreeSetup(fixture);
 		assert.isTrue(
-			checks['aria-allowed-role'].evaluate.call(checkContext, node)
+			axe.testUtils
+				.getCheckEvaluate('aria-allowed-role')
+				.call(checkContext, node)
 		);
 		assert.deepEqual(checkContext._data, null);
 		node.setAttribute('role', 'none');
 		assert.isTrue(
-			checks['aria-allowed-role'].evaluate.call(checkContext, node)
+			axe.testUtils
+				.getCheckEvaluate('aria-allowed-role')
+				.call(checkContext, node)
 		);
 		assert.deepEqual(checkContext._data, null);
 	});
@@ -134,12 +140,16 @@ describe('aria-allowed-role', function() {
 		fixture.appendChild(node);
 		flatTreeSetup(fixture);
 		assert.isFalse(
-			checks['aria-allowed-role'].evaluate.call(checkContext, node)
+			axe.testUtils
+				.getCheckEvaluate('aria-allowed-role')
+				.call(checkContext, node)
 		);
 		assert.deepEqual(checkContext._data, ['presentation']);
 		node.setAttribute('role', 'none');
 		assert.isFalse(
-			checks['aria-allowed-role'].evaluate.call(checkContext, node)
+			axe.testUtils
+				.getCheckEvaluate('aria-allowed-role')
+				.call(checkContext, node)
 		);
 		assert.deepEqual(checkContext._data, ['none']);
 	});
@@ -150,7 +160,9 @@ describe('aria-allowed-role', function() {
 		fixture.appendChild(node);
 		flatTreeSetup(fixture);
 		assert.isTrue(
-			checks['aria-allowed-role'].evaluate.call(checkContext, node)
+			axe.testUtils
+				.getCheckEvaluate('aria-allowed-role')
+				.call(checkContext, node)
 		);
 		assert.isNull(checkContext._data, null);
 	});
@@ -162,7 +174,9 @@ describe('aria-allowed-role', function() {
 		fixture.appendChild(node);
 		flatTreeSetup(fixture);
 		assert.isTrue(
-			checks['aria-allowed-role'].evaluate.call(checkContext, node)
+			axe.testUtils
+				.getCheckEvaluate('aria-allowed-role')
+				.call(checkContext, node)
 		);
 	});
 
@@ -173,7 +187,9 @@ describe('aria-allowed-role', function() {
 		fixture.appendChild(node);
 		flatTreeSetup(fixture);
 		assert.isTrue(
-			checks['aria-allowed-role'].evaluate.call(checkContext, node)
+			axe.testUtils
+				.getCheckEvaluate('aria-allowed-role')
+				.call(checkContext, node)
 		);
 	});
 
@@ -184,7 +200,9 @@ describe('aria-allowed-role', function() {
 		fixture.appendChild(node);
 		flatTreeSetup(fixture);
 		assert.isTrue(
-			checks['aria-allowed-role'].evaluate.call(checkContext, node)
+			axe.testUtils
+				.getCheckEvaluate('aria-allowed-role')
+				.call(checkContext, node)
 		);
 	});
 
@@ -195,7 +213,9 @@ describe('aria-allowed-role', function() {
 		fixture.appendChild(node);
 		flatTreeSetup(fixture);
 		assert.isTrue(
-			checks['aria-allowed-role'].evaluate.call(checkContext, node)
+			axe.testUtils
+				.getCheckEvaluate('aria-allowed-role')
+				.call(checkContext, node)
 		);
 	});
 
@@ -206,7 +226,9 @@ describe('aria-allowed-role', function() {
 		fixture.appendChild(node);
 		flatTreeSetup(fixture);
 		assert.isTrue(
-			checks['aria-allowed-role'].evaluate.call(checkContext, node)
+			axe.testUtils
+				.getCheckEvaluate('aria-allowed-role')
+				.call(checkContext, node)
 		);
 	});
 
@@ -217,7 +239,9 @@ describe('aria-allowed-role', function() {
 		fixture.appendChild(node);
 		flatTreeSetup(fixture);
 		assert.isTrue(
-			checks['aria-allowed-role'].evaluate.call(checkContext, node)
+			axe.testUtils
+				.getCheckEvaluate('aria-allowed-role')
+				.call(checkContext, node)
 		);
 	});
 
@@ -228,7 +252,9 @@ describe('aria-allowed-role', function() {
 		fixture.appendChild(node);
 		flatTreeSetup(fixture);
 		assert.isTrue(
-			checks['aria-allowed-role'].evaluate.call(checkContext, node)
+			axe.testUtils
+				.getCheckEvaluate('aria-allowed-role')
+				.call(checkContext, node)
 		);
 	});
 
@@ -239,7 +265,9 @@ describe('aria-allowed-role', function() {
 		fixture.appendChild(node);
 		flatTreeSetup(fixture);
 		assert.isTrue(
-			checks['aria-allowed-role'].evaluate.call(checkContext, node)
+			axe.testUtils
+				.getCheckEvaluate('aria-allowed-role')
+				.call(checkContext, node)
 		);
 	});
 
@@ -250,7 +278,9 @@ describe('aria-allowed-role', function() {
 		fixture.appendChild(node);
 		flatTreeSetup(fixture);
 		assert.isTrue(
-			checks['aria-allowed-role'].evaluate.call(checkContext, node)
+			axe.testUtils
+				.getCheckEvaluate('aria-allowed-role')
+				.call(checkContext, node)
 		);
 	});
 
@@ -261,7 +291,9 @@ describe('aria-allowed-role', function() {
 		fixture.appendChild(node);
 		flatTreeSetup(fixture);
 		assert.isTrue(
-			checks['aria-allowed-role'].evaluate.call(checkContext, node)
+			axe.testUtils
+				.getCheckEvaluate('aria-allowed-role')
+				.call(checkContext, node)
 		);
 	});
 
@@ -271,7 +303,9 @@ describe('aria-allowed-role', function() {
 		fixture.appendChild(node);
 		flatTreeSetup(fixture);
 		assert.isFalse(
-			checks['aria-allowed-role'].evaluate.call(checkContext, node)
+			axe.testUtils
+				.getCheckEvaluate('aria-allowed-role')
+				.call(checkContext, node)
 		);
 		assert.deepEqual(checkContext._data, ['link']);
 	});
@@ -282,7 +316,9 @@ describe('aria-allowed-role', function() {
 		fixture.appendChild(node);
 		flatTreeSetup(fixture);
 		assert.isTrue(
-			checks['aria-allowed-role'].evaluate.call(checkContext, node)
+			axe.testUtils
+				.getCheckEvaluate('aria-allowed-role')
+				.call(checkContext, node)
 		);
 	});
 
@@ -292,7 +328,9 @@ describe('aria-allowed-role', function() {
 		fixture.appendChild(node);
 		flatTreeSetup(fixture);
 		assert.isTrue(
-			checks['aria-allowed-role'].evaluate.call(checkContext, node)
+			axe.testUtils
+				.getCheckEvaluate('aria-allowed-role')
+				.call(checkContext, node)
 		);
 	});
 
@@ -302,7 +340,9 @@ describe('aria-allowed-role', function() {
 		node.href = '';
 		fixture.appendChild(node);
 		flatTreeSetup(fixture);
-		var actual = checks['aria-allowed-role'].evaluate.call(checkContext, node);
+		var actual = axe.testUtils
+			.getCheckEvaluate('aria-allowed-role')
+			.call(checkContext, node);
 		assert.isTrue(actual);
 	});
 
@@ -313,7 +353,9 @@ describe('aria-allowed-role', function() {
 		fixture.appendChild(node);
 		flatTreeSetup(fixture);
 		assert.isTrue(
-			checks['aria-allowed-role'].evaluate.call(checkContext, node)
+			axe.testUtils
+				.getCheckEvaluate('aria-allowed-role')
+				.call(checkContext, node)
 		);
 	});
 
@@ -324,7 +366,9 @@ describe('aria-allowed-role', function() {
 		fixture.appendChild(node);
 		flatTreeSetup(fixture);
 		assert.isFalse(
-			checks['aria-allowed-role'].evaluate.call(checkContext, node)
+			axe.testUtils
+				.getCheckEvaluate('aria-allowed-role')
+				.call(checkContext, node)
 		);
 	});
 
@@ -334,7 +378,9 @@ describe('aria-allowed-role', function() {
 		fixture.appendChild(node);
 		flatTreeSetup(fixture);
 		assert.isTrue(
-			checks['aria-allowed-role'].evaluate.call(checkContext, node)
+			axe.testUtils
+				.getCheckEvaluate('aria-allowed-role')
+				.call(checkContext, node)
 		);
 		assert.isNull(checkContext._data, null);
 	});
@@ -344,7 +390,9 @@ describe('aria-allowed-role', function() {
 		node.setAttribute('role', 'navigation');
 		fixture.appendChild(node);
 		flatTreeSetup(fixture);
-		var actual = checks['aria-allowed-role'].evaluate.call(checkContext, node);
+		var actual = axe.testUtils
+			.getCheckEvaluate('aria-allowed-role')
+			.call(checkContext, node);
 		assert.isTrue(actual);
 		assert.isNull(checkContext._data, null);
 	});
@@ -354,7 +402,9 @@ describe('aria-allowed-role', function() {
 		var target = fixture.children[0];
 		flatTreeSetup(fixture);
 		assert.isFalse(
-			checks['aria-allowed-role'].evaluate.call(checkContext, target)
+			axe.testUtils
+				.getCheckEvaluate('aria-allowed-role')
+				.call(checkContext, target)
 		);
 	});
 
@@ -363,7 +413,9 @@ describe('aria-allowed-role', function() {
 		var target = fixture.children[0];
 		flatTreeSetup(fixture);
 		assert.isTrue(
-			checks['aria-allowed-role'].evaluate.call(checkContext, target)
+			axe.testUtils
+				.getCheckEvaluate('aria-allowed-role')
+				.call(checkContext, target)
 		);
 	});
 });
diff --git a/test/checks/aria/aria-hidden-body.js b/test/checks/aria/aria-hidden-body.js
index d00b5fb457..acb91e8fb7 100644
--- a/test/checks/aria/aria-hidden-body.js
+++ b/test/checks/aria/aria-hidden-body.js
@@ -10,18 +10,28 @@ describe('aria-hidden', function() {
 	});
 
 	it('should not be present on document.body', function() {
-		assert.isTrue(checks['aria-hidden-body'].evaluate.call(checkContext, node));
+		assert.isTrue(
+			axe.testUtils
+				.getCheckEvaluate('aria-hidden-body')
+				.call(checkContext, node)
+		);
 	});
 
 	it('fails appropriately if aria-hidden=true on document.body', function() {
 		node.setAttribute('aria-hidden', 'true');
 		assert.isFalse(
-			checks['aria-hidden-body'].evaluate.call(checkContext, node)
+			axe.testUtils
+				.getCheckEvaluate('aria-hidden-body')
+				.call(checkContext, node)
 		);
 	});
 
 	it('passes if aria-hidden=false on document.body', function() {
 		node.setAttribute('aria-hidden', 'false');
-		assert.isTrue(checks['aria-hidden-body'].evaluate.call(checkContext, node));
+		assert.isTrue(
+			axe.testUtils
+				.getCheckEvaluate('aria-hidden-body')
+				.call(checkContext, node)
+		);
 	});
 });
diff --git a/test/checks/aria/aria-roledescription.js b/test/checks/aria/aria-roledescription.js
index de344bf8e2..96194594d3 100644
--- a/test/checks/aria/aria-roledescription.js
+++ b/test/checks/aria/aria-roledescription.js
@@ -12,13 +12,11 @@ describe('aria-roledescription', function() {
 	it('returns true for elements with an implicit supported role', function() {
 		fixture.innerHTML =
 			'<button aria-roledescription="Awesome Button">Click</button>';
-		var actual = checks['aria-roledescription'].evaluate.call(
-			checkContext,
-			fixture.firstChild,
-			{
+		var actual = axe.testUtils
+			.getCheckEvaluate('aria-roledescription')
+			.call(checkContext, fixture.firstChild, {
 				supportedRoles: ['button']
-			}
-		);
+			});
 		assert.equal(actual, true);
 		assert.isNull(checkContext._data, null);
 	});
@@ -26,13 +24,11 @@ describe('aria-roledescription', function() {
 	it('returns true for elements with an explicit supported role', function() {
 		fixture.innerHTML =
 			'<div role="radio" aria-roledescription="Awesome Radio">Click</div>';
-		var actual = checks['aria-roledescription'].evaluate.call(
-			checkContext,
-			fixture.firstChild,
-			{
+		var actual = axe.testUtils
+			.getCheckEvaluate('aria-roledescription')
+			.call(checkContext, fixture.firstChild, {
 				supportedRoles: ['radio']
-			}
-		);
+			});
 		assert.equal(actual, true);
 		assert.isNull(checkContext._data, null);
 	});
@@ -40,10 +36,9 @@ describe('aria-roledescription', function() {
 	it('returns undefined for elements with an unsupported role', function() {
 		fixture.innerHTML =
 			'<div role="main" aria-roledescription="Awesome Main">The main element</div>';
-		var actual = checks['aria-roledescription'].evaluate.call(
-			checkContext,
-			fixture.firstChild
-		);
+		var actual = axe.testUtils
+			.getCheckEvaluate('aria-roledescription')
+			.call(checkContext, fixture.firstChild);
 		assert.equal(actual, undefined);
 		assert.isNull(checkContext._data, null);
 	});
@@ -51,10 +46,9 @@ describe('aria-roledescription', function() {
 	it('returns false for elements without role', function() {
 		fixture.innerHTML =
 			'<div aria-roledescription="Awesome Main">The main element</div>';
-		var actual = checks['aria-roledescription'].evaluate.call(
-			checkContext,
-			fixture.firstChild
-		);
+		var actual = axe.testUtils
+			.getCheckEvaluate('aria-roledescription')
+			.call(checkContext, fixture.firstChild);
 		assert.equal(actual, false);
 		assert.isNull(checkContext._data, null);
 	});
@@ -62,10 +56,9 @@ describe('aria-roledescription', function() {
 	it('returns false for elements with role=presentation', function() {
 		fixture.innerHTML =
 			'<div role="presentation" aria-roledescription="Awesome Main">The main element</div>';
-		var actual = checks['aria-roledescription'].evaluate.call(
-			checkContext,
-			fixture.firstChild
-		);
+		var actual = axe.testUtils
+			.getCheckEvaluate('aria-roledescription')
+			.call(checkContext, fixture.firstChild);
 		assert.equal(actual, false);
 		assert.isNull(checkContext._data, null);
 	});
@@ -73,10 +66,9 @@ describe('aria-roledescription', function() {
 	it('returns false for elements with role=none', function() {
 		fixture.innerHTML =
 			'<div role="none" aria-roledescription="Awesome Main">The main element</div>';
-		var actual = checks['aria-roledescription'].evaluate.call(
-			checkContext,
-			fixture.firstChild
-		);
+		var actual = axe.testUtils
+			.getCheckEvaluate('aria-roledescription')
+			.call(checkContext, fixture.firstChild);
 		assert.equal(actual, false);
 		assert.isNull(checkContext._data, null);
 	});
diff --git a/test/checks/aria/errormessage.js b/test/checks/aria/errormessage.js
index a0e5523845..e779064baa 100644
--- a/test/checks/aria/errormessage.js
+++ b/test/checks/aria/errormessage.js
@@ -25,7 +25,9 @@ describe('aria-errormessage', function() {
 		var target = fixture.children[0];
 		target.setAttribute('aria-errormessage', 'plain');
 		assert.isFalse(
-			checks['aria-errormessage'].evaluate.call(checkContext, target)
+			axe.testUtils
+				.getCheckEvaluate('aria-errormessage')
+				.call(checkContext, target)
 		);
 	});
 
@@ -36,7 +38,9 @@ describe('aria-errormessage', function() {
 		var target = fixture.children[0];
 		target.setAttribute('aria-errormessage', 'alert');
 		assert.isTrue(
-			checks['aria-errormessage'].evaluate.call(checkContext, target)
+			axe.testUtils
+				.getCheckEvaluate('aria-errormessage')
+				.call(checkContext, target)
 		);
 	});
 
@@ -47,7 +51,9 @@ describe('aria-errormessage', function() {
 		var target = fixture.children[0];
 		target.setAttribute('aria-errormessage', 'live');
 		assert.isTrue(
-			checks['aria-errormessage'].evaluate.call(checkContext, target)
+			axe.testUtils
+				.getCheckEvaluate('aria-errormessage')
+				.call(checkContext, target)
 		);
 	});
 
@@ -59,7 +65,9 @@ describe('aria-errormessage', function() {
 		target.setAttribute('aria-errormessage', 'plain');
 		target.setAttribute('aria-describedby', 'plain');
 		assert.isTrue(
-			checks['aria-errormessage'].evaluate.call(checkContext, target)
+			axe.testUtils
+				.getCheckEvaluate('aria-errormessage')
+				.call(checkContext, target)
 		);
 	});
 
@@ -69,7 +77,9 @@ describe('aria-errormessage', function() {
 		fixture.innerHTML = testHTML;
 		var target = fixture.children[0];
 		target.setAttribute('aria-errormessage', ' foo  bar \tbaz  ');
-		checks['aria-errormessage'].evaluate.call(checkContext, target);
+		axe.testUtils
+			.getCheckEvaluate('aria-errormessage')
+			.call(checkContext, target);
 		assert.deepEqual(checkContext._data, ['foo', 'bar', 'baz']);
 	});
 
@@ -79,10 +89,9 @@ describe('aria-errormessage', function() {
 		].allowEmpty = true;
 		fixture.innerHTML = '<div aria-errormessage=" "></div>';
 		assert.isTrue(
-			checks['aria-errormessage'].evaluate.call(
-				checkContext,
-				fixture.children[0]
-			)
+			axe.testUtils
+				.getCheckEvaluate('aria-errormessage')
+				.call(checkContext, fixture.children[0])
 		);
 	});
 
@@ -92,10 +101,9 @@ describe('aria-errormessage', function() {
 		].allowEmpty = false;
 		fixture.innerHTML = '<div aria-errormessage=" "></div>';
 		assert.isFalse(
-			checks['aria-errormessage'].evaluate.call(
-				checkContext,
-				fixture.children[0]
-			)
+			axe.testUtils
+				.getCheckEvaluate('aria-errormessage')
+				.call(checkContext, fixture.children[0])
 		);
 	});
 
@@ -107,7 +115,9 @@ describe('aria-errormessage', function() {
 				'<div id="live" aria-live="assertive"></div>'
 			);
 			assert.isFalse(
-				checks['aria-errormessage'].evaluate.apply(checkContext, params)
+				axe.testUtils
+					.getCheckEvaluate('aria-errormessage')
+					.apply(checkContext, params)
 			);
 		}
 	);
@@ -121,7 +131,9 @@ describe('aria-errormessage', function() {
 					'<div id="live" aria-live="assertive"></div>'
 			);
 			assert.isTrue(
-				checks['aria-errormessage'].evaluate.apply(checkContext, params)
+				axe.testUtils
+					.getCheckEvaluate('aria-errormessage')
+					.apply(checkContext, params)
 			);
 		}
 	);
diff --git a/test/checks/aria/has-widget-role.js b/test/checks/aria/has-widget-role.js
index 415d252870..0a85337c04 100644
--- a/test/checks/aria/has-widget-role.js
+++ b/test/checks/aria/has-widget-role.js
@@ -13,14 +13,18 @@ describe('has-widget-role', function() {
 	it('should return false for elements with no role', function() {
 		node = document.createElement('div');
 		fixture.appendChild(node);
-		assert.isFalse(checks['has-widget-role'].evaluate.call(checkContext, node));
+		assert.isFalse(
+			axe.testUtils.getCheckEvaluate('has-widget-role').call(checkContext, node)
+		);
 	});
 
 	it('should return false for elements with nonsensical roles', function() {
 		node = document.createElement('div');
 		node.setAttribute('role', 'buttonbuttonbutton');
 		fixture.appendChild(node);
-		assert.isFalse(checks['has-widget-role'].evaluate.call(checkContext, node));
+		assert.isFalse(
+			axe.testUtils.getCheckEvaluate('has-widget-role').call(checkContext, node)
+		);
 	});
 
 	// Widget roles
@@ -28,133 +32,171 @@ describe('has-widget-role', function() {
 		node = document.createElement('div');
 		node.setAttribute('role', 'button');
 		fixture.appendChild(node);
-		assert.isTrue(checks['has-widget-role'].evaluate.call(checkContext, node));
+		assert.isTrue(
+			axe.testUtils.getCheckEvaluate('has-widget-role').call(checkContext, node)
+		);
 	});
 
 	it('should return true for role=checkbox', function() {
 		node = document.createElement('div');
 		node.setAttribute('role', 'checkbox');
 		fixture.appendChild(node);
-		assert.isTrue(checks['has-widget-role'].evaluate.call(checkContext, node));
+		assert.isTrue(
+			axe.testUtils.getCheckEvaluate('has-widget-role').call(checkContext, node)
+		);
 	});
 
 	it('should return true for role=gridcell', function() {
 		node = document.createElement('div');
 		node.setAttribute('role', 'gridcell');
 		fixture.appendChild(node);
-		assert.isTrue(checks['has-widget-role'].evaluate.call(checkContext, node));
+		assert.isTrue(
+			axe.testUtils.getCheckEvaluate('has-widget-role').call(checkContext, node)
+		);
 	});
 
 	it('should return true for role=link', function() {
 		node = document.createElement('div');
 		node.setAttribute('role', 'link');
 		fixture.appendChild(node);
-		assert.isTrue(checks['has-widget-role'].evaluate.call(checkContext, node));
+		assert.isTrue(
+			axe.testUtils.getCheckEvaluate('has-widget-role').call(checkContext, node)
+		);
 	});
 
 	it('should return true for role=menuitem', function() {
 		node = document.createElement('div');
 		node.setAttribute('role', 'menuitem');
 		fixture.appendChild(node);
-		assert.isTrue(checks['has-widget-role'].evaluate.call(checkContext, node));
+		assert.isTrue(
+			axe.testUtils.getCheckEvaluate('has-widget-role').call(checkContext, node)
+		);
 	});
 
 	it('should return true for role=menuitemcheckbox', function() {
 		node = document.createElement('div');
 		node.setAttribute('role', 'menuitemcheckbox');
 		fixture.appendChild(node);
-		assert.isTrue(checks['has-widget-role'].evaluate.call(checkContext, node));
+		assert.isTrue(
+			axe.testUtils.getCheckEvaluate('has-widget-role').call(checkContext, node)
+		);
 	});
 
 	it('should return true for role=menuitemradio', function() {
 		node = document.createElement('div');
 		node.setAttribute('role', 'menuitemradio');
 		fixture.appendChild(node);
-		assert.isTrue(checks['has-widget-role'].evaluate.call(checkContext, node));
+		assert.isTrue(
+			axe.testUtils.getCheckEvaluate('has-widget-role').call(checkContext, node)
+		);
 	});
 
 	it('should return true for role=option', function() {
 		node = document.createElement('div');
 		node.setAttribute('role', 'option');
 		fixture.appendChild(node);
-		assert.isTrue(checks['has-widget-role'].evaluate.call(checkContext, node));
+		assert.isTrue(
+			axe.testUtils.getCheckEvaluate('has-widget-role').call(checkContext, node)
+		);
 	});
 
 	it('should return true for role=progressbar', function() {
 		node = document.createElement('div');
 		node.setAttribute('role', 'progressbar');
 		fixture.appendChild(node);
-		assert.isTrue(checks['has-widget-role'].evaluate.call(checkContext, node));
+		assert.isTrue(
+			axe.testUtils.getCheckEvaluate('has-widget-role').call(checkContext, node)
+		);
 	});
 
 	it('should return true for role=radio', function() {
 		node = document.createElement('div');
 		node.setAttribute('role', 'radio');
 		fixture.appendChild(node);
-		assert.isTrue(checks['has-widget-role'].evaluate.call(checkContext, node));
+		assert.isTrue(
+			axe.testUtils.getCheckEvaluate('has-widget-role').call(checkContext, node)
+		);
 	});
 
 	it('should return true for role=scrollbar', function() {
 		node = document.createElement('div');
 		node.setAttribute('role', 'scrollbar');
 		fixture.appendChild(node);
-		assert.isTrue(checks['has-widget-role'].evaluate.call(checkContext, node));
+		assert.isTrue(
+			axe.testUtils.getCheckEvaluate('has-widget-role').call(checkContext, node)
+		);
 	});
 
 	it('should return true for role=searchbox', function() {
 		node = document.createElement('div');
 		node.setAttribute('role', 'searchbox');
 		fixture.appendChild(node);
-		assert.isTrue(checks['has-widget-role'].evaluate.call(checkContext, node));
+		assert.isTrue(
+			axe.testUtils.getCheckEvaluate('has-widget-role').call(checkContext, node)
+		);
 	});
 
 	it('should return true for role=slider', function() {
 		node = document.createElement('div');
 		node.setAttribute('role', 'slider');
 		fixture.appendChild(node);
-		assert.isTrue(checks['has-widget-role'].evaluate.call(checkContext, node));
+		assert.isTrue(
+			axe.testUtils.getCheckEvaluate('has-widget-role').call(checkContext, node)
+		);
 	});
 
 	it('should return true for role=spinbutton', function() {
 		node = document.createElement('div');
 		node.setAttribute('role', 'spinbutton');
 		fixture.appendChild(node);
-		assert.isTrue(checks['has-widget-role'].evaluate.call(checkContext, node));
+		assert.isTrue(
+			axe.testUtils.getCheckEvaluate('has-widget-role').call(checkContext, node)
+		);
 	});
 
 	it('should return true for role=switch', function() {
 		node = document.createElement('div');
 		node.setAttribute('role', 'switch');
 		fixture.appendChild(node);
-		assert.isTrue(checks['has-widget-role'].evaluate.call(checkContext, node));
+		assert.isTrue(
+			axe.testUtils.getCheckEvaluate('has-widget-role').call(checkContext, node)
+		);
 	});
 
 	it('should return true for role=tab', function() {
 		node = document.createElement('div');
 		node.setAttribute('role', 'tab');
 		fixture.appendChild(node);
-		assert.isTrue(checks['has-widget-role'].evaluate.call(checkContext, node));
+		assert.isTrue(
+			axe.testUtils.getCheckEvaluate('has-widget-role').call(checkContext, node)
+		);
 	});
 
 	it('should return true for role=tabpanel', function() {
 		node = document.createElement('div');
 		node.setAttribute('role', 'tabpanel');
 		fixture.appendChild(node);
-		assert.isTrue(checks['has-widget-role'].evaluate.call(checkContext, node));
+		assert.isTrue(
+			axe.testUtils.getCheckEvaluate('has-widget-role').call(checkContext, node)
+		);
 	});
 
 	it('should return true for role=textbox', function() {
 		node = document.createElement('div');
 		node.setAttribute('role', 'textbox');
 		fixture.appendChild(node);
-		assert.isTrue(checks['has-widget-role'].evaluate.call(checkContext, node));
+		assert.isTrue(
+			axe.testUtils.getCheckEvaluate('has-widget-role').call(checkContext, node)
+		);
 	});
 
 	it('should return true for role=treeitem', function() {
 		node = document.createElement('div');
 		node.setAttribute('role', 'treeitem');
 		fixture.appendChild(node);
-		assert.isTrue(checks['has-widget-role'].evaluate.call(checkContext, node));
+		assert.isTrue(
+			axe.testUtils.getCheckEvaluate('has-widget-role').call(checkContext, node)
+		);
 	});
 
 	// Composite widget roles
@@ -162,231 +204,297 @@ describe('has-widget-role', function() {
 		node = document.createElement('div');
 		node.setAttribute('role', 'combobox');
 		fixture.appendChild(node);
-		assert.isTrue(checks['has-widget-role'].evaluate.call(checkContext, node));
+		assert.isTrue(
+			axe.testUtils.getCheckEvaluate('has-widget-role').call(checkContext, node)
+		);
 	});
 
 	it('should return true for role=grid', function() {
 		node = document.createElement('div');
 		node.setAttribute('role', 'grid');
 		fixture.appendChild(node);
-		assert.isTrue(checks['has-widget-role'].evaluate.call(checkContext, node));
+		assert.isTrue(
+			axe.testUtils.getCheckEvaluate('has-widget-role').call(checkContext, node)
+		);
 	});
 
 	it('should return true for role=listbox', function() {
 		node = document.createElement('div');
 		node.setAttribute('role', 'listbox');
 		fixture.appendChild(node);
-		assert.isTrue(checks['has-widget-role'].evaluate.call(checkContext, node));
+		assert.isTrue(
+			axe.testUtils.getCheckEvaluate('has-widget-role').call(checkContext, node)
+		);
 	});
 
 	it('should return true for role=menu', function() {
 		node = document.createElement('div');
 		node.setAttribute('role', 'menu');
 		fixture.appendChild(node);
-		assert.isTrue(checks['has-widget-role'].evaluate.call(checkContext, node));
+		assert.isTrue(
+			axe.testUtils.getCheckEvaluate('has-widget-role').call(checkContext, node)
+		);
 	});
 
 	it('should return true for role=menubar', function() {
 		node = document.createElement('div');
 		node.setAttribute('role', 'menubar');
 		fixture.appendChild(node);
-		assert.isTrue(checks['has-widget-role'].evaluate.call(checkContext, node));
+		assert.isTrue(
+			axe.testUtils.getCheckEvaluate('has-widget-role').call(checkContext, node)
+		);
 	});
 
 	it('should return true for role=radiogroup', function() {
 		node = document.createElement('div');
 		node.setAttribute('role', 'radiogroup');
 		fixture.appendChild(node);
-		assert.isTrue(checks['has-widget-role'].evaluate.call(checkContext, node));
+		assert.isTrue(
+			axe.testUtils.getCheckEvaluate('has-widget-role').call(checkContext, node)
+		);
 	});
 
 	it('should return true for role=tablist', function() {
 		node = document.createElement('div');
 		node.setAttribute('role', 'tablist');
 		fixture.appendChild(node);
-		assert.isTrue(checks['has-widget-role'].evaluate.call(checkContext, node));
+		assert.isTrue(
+			axe.testUtils.getCheckEvaluate('has-widget-role').call(checkContext, node)
+		);
 	});
 
 	it('should return true for role=tree', function() {
 		node = document.createElement('div');
 		node.setAttribute('role', 'tree');
 		fixture.appendChild(node);
-		assert.isTrue(checks['has-widget-role'].evaluate.call(checkContext, node));
+		assert.isTrue(
+			axe.testUtils.getCheckEvaluate('has-widget-role').call(checkContext, node)
+		);
 	});
 
 	it('should return true for role=treegrid', function() {
 		node = document.createElement('div');
 		node.setAttribute('role', 'treegrid');
 		fixture.appendChild(node);
-		assert.isTrue(checks['has-widget-role'].evaluate.call(checkContext, node));
+		assert.isTrue(
+			axe.testUtils.getCheckEvaluate('has-widget-role').call(checkContext, node)
+		);
 	});
 
 	it('should return false for role=application', function() {
 		node = document.createElement('div');
 		node.setAttribute('role', 'application');
 		fixture.appendChild(node);
-		assert.isFalse(checks['has-widget-role'].evaluate.call(checkContext, node));
+		assert.isFalse(
+			axe.testUtils.getCheckEvaluate('has-widget-role').call(checkContext, node)
+		);
 	});
 
 	it('should return false for role=article', function() {
 		node = document.createElement('div');
 		node.setAttribute('role', 'article');
 		fixture.appendChild(node);
-		assert.isFalse(checks['has-widget-role'].evaluate.call(checkContext, node));
+		assert.isFalse(
+			axe.testUtils.getCheckEvaluate('has-widget-role').call(checkContext, node)
+		);
 	});
 
 	it('should return false for role=cell', function() {
 		node = document.createElement('div');
 		node.setAttribute('role', 'cell');
 		fixture.appendChild(node);
-		assert.isFalse(checks['has-widget-role'].evaluate.call(checkContext, node));
+		assert.isFalse(
+			axe.testUtils.getCheckEvaluate('has-widget-role').call(checkContext, node)
+		);
 	});
 
 	it('should return false for role=columnheader', function() {
 		node = document.createElement('div');
 		node.setAttribute('role', 'columnheader');
 		fixture.appendChild(node);
-		assert.isFalse(checks['has-widget-role'].evaluate.call(checkContext, node));
+		assert.isFalse(
+			axe.testUtils.getCheckEvaluate('has-widget-role').call(checkContext, node)
+		);
 	});
 
 	it('should return false for role=definition', function() {
 		node = document.createElement('div');
 		node.setAttribute('role', 'definition');
 		fixture.appendChild(node);
-		assert.isFalse(checks['has-widget-role'].evaluate.call(checkContext, node));
+		assert.isFalse(
+			axe.testUtils.getCheckEvaluate('has-widget-role').call(checkContext, node)
+		);
 	});
 
 	it('should return false for role=directory', function() {
 		node = document.createElement('div');
 		node.setAttribute('role', 'directory');
 		fixture.appendChild(node);
-		assert.isFalse(checks['has-widget-role'].evaluate.call(checkContext, node));
+		assert.isFalse(
+			axe.testUtils.getCheckEvaluate('has-widget-role').call(checkContext, node)
+		);
 	});
 
 	it('should return false for role=document', function() {
 		node = document.createElement('div');
 		node.setAttribute('role', 'document');
 		fixture.appendChild(node);
-		assert.isFalse(checks['has-widget-role'].evaluate.call(checkContext, node));
+		assert.isFalse(
+			axe.testUtils.getCheckEvaluate('has-widget-role').call(checkContext, node)
+		);
 	});
 
 	it('should return false for role=feed', function() {
 		node = document.createElement('div');
 		node.setAttribute('role', 'feed');
 		fixture.appendChild(node);
-		assert.isFalse(checks['has-widget-role'].evaluate.call(checkContext, node));
+		assert.isFalse(
+			axe.testUtils.getCheckEvaluate('has-widget-role').call(checkContext, node)
+		);
 	});
 
 	it('should return false for role=figure', function() {
 		node = document.createElement('div');
 		node.setAttribute('role', 'figure');
 		fixture.appendChild(node);
-		assert.isFalse(checks['has-widget-role'].evaluate.call(checkContext, node));
+		assert.isFalse(
+			axe.testUtils.getCheckEvaluate('has-widget-role').call(checkContext, node)
+		);
 	});
 
 	it('should return false for role=group', function() {
 		node = document.createElement('div');
 		node.setAttribute('role', 'group');
 		fixture.appendChild(node);
-		assert.isFalse(checks['has-widget-role'].evaluate.call(checkContext, node));
+		assert.isFalse(
+			axe.testUtils.getCheckEvaluate('has-widget-role').call(checkContext, node)
+		);
 	});
 
 	it('should return false for role=heading', function() {
 		node = document.createElement('div');
 		node.setAttribute('role', 'heading');
 		fixture.appendChild(node);
-		assert.isFalse(checks['has-widget-role'].evaluate.call(checkContext, node));
+		assert.isFalse(
+			axe.testUtils.getCheckEvaluate('has-widget-role').call(checkContext, node)
+		);
 	});
 
 	it('should return false for role=img', function() {
 		node = document.createElement('div');
 		node.setAttribute('role', 'img');
 		fixture.appendChild(node);
-		assert.isFalse(checks['has-widget-role'].evaluate.call(checkContext, node));
+		assert.isFalse(
+			axe.testUtils.getCheckEvaluate('has-widget-role').call(checkContext, node)
+		);
 	});
 
 	it('should return false for role=list', function() {
 		node = document.createElement('div');
 		node.setAttribute('role', 'list');
 		fixture.appendChild(node);
-		assert.isFalse(checks['has-widget-role'].evaluate.call(checkContext, node));
+		assert.isFalse(
+			axe.testUtils.getCheckEvaluate('has-widget-role').call(checkContext, node)
+		);
 	});
 
 	it('should return false for role=listitem', function() {
 		node = document.createElement('div');
 		node.setAttribute('role', 'listitem');
 		fixture.appendChild(node);
-		assert.isFalse(checks['has-widget-role'].evaluate.call(checkContext, node));
+		assert.isFalse(
+			axe.testUtils.getCheckEvaluate('has-widget-role').call(checkContext, node)
+		);
 	});
 
 	it('should return false for role=math', function() {
 		node = document.createElement('div');
 		node.setAttribute('role', 'math');
 		fixture.appendChild(node);
-		assert.isFalse(checks['has-widget-role'].evaluate.call(checkContext, node));
+		assert.isFalse(
+			axe.testUtils.getCheckEvaluate('has-widget-role').call(checkContext, node)
+		);
 	});
 
 	it('should return false for role=none', function() {
 		node = document.createElement('div');
 		node.setAttribute('role', 'none');
 		fixture.appendChild(node);
-		assert.isFalse(checks['has-widget-role'].evaluate.call(checkContext, node));
+		assert.isFalse(
+			axe.testUtils.getCheckEvaluate('has-widget-role').call(checkContext, node)
+		);
 	});
 
 	it('should return false for role=note', function() {
 		node = document.createElement('div');
 		node.setAttribute('role', 'note');
 		fixture.appendChild(node);
-		assert.isFalse(checks['has-widget-role'].evaluate.call(checkContext, node));
+		assert.isFalse(
+			axe.testUtils.getCheckEvaluate('has-widget-role').call(checkContext, node)
+		);
 	});
 
 	it('should return false for role=presentation', function() {
 		node = document.createElement('div');
 		node.setAttribute('role', 'presentation');
 		fixture.appendChild(node);
-		assert.isFalse(checks['has-widget-role'].evaluate.call(checkContext, node));
+		assert.isFalse(
+			axe.testUtils.getCheckEvaluate('has-widget-role').call(checkContext, node)
+		);
 	});
 
 	it('should return false for role=row', function() {
 		node = document.createElement('div');
 		node.setAttribute('role', 'row');
 		fixture.appendChild(node);
-		assert.isFalse(checks['has-widget-role'].evaluate.call(checkContext, node));
+		assert.isFalse(
+			axe.testUtils.getCheckEvaluate('has-widget-role').call(checkContext, node)
+		);
 	});
 
 	it('should return false for role=rowgroup', function() {
 		node = document.createElement('div');
 		node.setAttribute('role', 'rowgroup');
 		fixture.appendChild(node);
-		assert.isFalse(checks['has-widget-role'].evaluate.call(checkContext, node));
+		assert.isFalse(
+			axe.testUtils.getCheckEvaluate('has-widget-role').call(checkContext, node)
+		);
 	});
 
 	it('should return false for role=rowheader', function() {
 		node = document.createElement('div');
 		node.setAttribute('role', 'rowheader');
 		fixture.appendChild(node);
-		assert.isFalse(checks['has-widget-role'].evaluate.call(checkContext, node));
+		assert.isFalse(
+			axe.testUtils.getCheckEvaluate('has-widget-role').call(checkContext, node)
+		);
 	});
 
 	it('should return false for role=table', function() {
 		node = document.createElement('div');
 		node.setAttribute('role', 'table');
 		fixture.appendChild(node);
-		assert.isFalse(checks['has-widget-role'].evaluate.call(checkContext, node));
+		assert.isFalse(
+			axe.testUtils.getCheckEvaluate('has-widget-role').call(checkContext, node)
+		);
 	});
 
 	it('should return false for role=term', function() {
 		node = document.createElement('div');
 		node.setAttribute('role', 'term');
 		fixture.appendChild(node);
-		assert.isFalse(checks['has-widget-role'].evaluate.call(checkContext, node));
+		assert.isFalse(
+			axe.testUtils.getCheckEvaluate('has-widget-role').call(checkContext, node)
+		);
 	});
 
 	it('should return false for role=toolbar', function() {
 		node = document.createElement('div');
 		node.setAttribute('role', 'toolbar');
 		fixture.appendChild(node);
-		assert.isFalse(checks['has-widget-role'].evaluate.call(checkContext, node));
+		assert.isFalse(
+			axe.testUtils.getCheckEvaluate('has-widget-role').call(checkContext, node)
+		);
 	});
 
 	// Landmark Roles
@@ -394,55 +502,71 @@ describe('has-widget-role', function() {
 		node = document.createElement('div');
 		node.setAttribute('role', 'banner');
 		fixture.appendChild(node);
-		assert.isFalse(checks['has-widget-role'].evaluate.call(checkContext, node));
+		assert.isFalse(
+			axe.testUtils.getCheckEvaluate('has-widget-role').call(checkContext, node)
+		);
 	});
 
 	it('should return false for role=complementary', function() {
 		node = document.createElement('div');
 		node.setAttribute('role', 'complementary');
 		fixture.appendChild(node);
-		assert.isFalse(checks['has-widget-role'].evaluate.call(checkContext, node));
+		assert.isFalse(
+			axe.testUtils.getCheckEvaluate('has-widget-role').call(checkContext, node)
+		);
 	});
 
 	it('should return false for role=contentinfo', function() {
 		node = document.createElement('div');
 		node.setAttribute('role', 'contentinfo');
 		fixture.appendChild(node);
-		assert.isFalse(checks['has-widget-role'].evaluate.call(checkContext, node));
+		assert.isFalse(
+			axe.testUtils.getCheckEvaluate('has-widget-role').call(checkContext, node)
+		);
 	});
 
 	it('should return false for role=form', function() {
 		node = document.createElement('div');
 		node.setAttribute('role', 'form');
 		fixture.appendChild(node);
-		assert.isFalse(checks['has-widget-role'].evaluate.call(checkContext, node));
+		assert.isFalse(
+			axe.testUtils.getCheckEvaluate('has-widget-role').call(checkContext, node)
+		);
 	});
 
 	it('should return false for role=main', function() {
 		node = document.createElement('div');
 		node.setAttribute('role', 'main');
 		fixture.appendChild(node);
-		assert.isFalse(checks['has-widget-role'].evaluate.call(checkContext, node));
+		assert.isFalse(
+			axe.testUtils.getCheckEvaluate('has-widget-role').call(checkContext, node)
+		);
 	});
 
 	it('should return false for role=navigation', function() {
 		node = document.createElement('div');
 		node.setAttribute('role', 'navigation');
 		fixture.appendChild(node);
-		assert.isFalse(checks['has-widget-role'].evaluate.call(checkContext, node));
+		assert.isFalse(
+			axe.testUtils.getCheckEvaluate('has-widget-role').call(checkContext, node)
+		);
 	});
 
 	it('should return false for role=region', function() {
 		node = document.createElement('div');
 		node.setAttribute('role', 'region');
 		fixture.appendChild(node);
-		assert.isFalse(checks['has-widget-role'].evaluate.call(checkContext, node));
+		assert.isFalse(
+			axe.testUtils.getCheckEvaluate('has-widget-role').call(checkContext, node)
+		);
 	});
 
 	it('should return false for role=search', function() {
 		node = document.createElement('div');
 		node.setAttribute('role', 'search');
 		fixture.appendChild(node);
-		assert.isFalse(checks['has-widget-role'].evaluate.call(checkContext, node));
+		assert.isFalse(
+			axe.testUtils.getCheckEvaluate('has-widget-role').call(checkContext, node)
+		);
 	});
 });
diff --git a/test/checks/aria/required-attr.js b/test/checks/aria/required-attr.js
index a83e171b25..0bba19cca6 100644
--- a/test/checks/aria/required-attr.js
+++ b/test/checks/aria/required-attr.js
@@ -15,12 +15,9 @@ describe('aria-required-attr', function() {
 		var vNode = queryFixture('<div id="target" role="slider" tabindex="1">');
 
 		assert.isFalse(
-			checks['aria-required-attr'].evaluate.call(
-				checkContext,
-				vNode.actualNode,
-				options,
-				vNode
-			)
+			axe.testUtils
+				.getCheckEvaluate('aria-required-attr')
+				.call(checkContext, vNode.actualNode, options, vNode)
 		);
 		assert.deepEqual(checkContext._data, ['aria-valuenow']);
 	});
@@ -29,12 +26,9 @@ describe('aria-required-attr', function() {
 		var vNode = queryFixture('<div id="target">');
 
 		assert.isTrue(
-			checks['aria-required-attr'].evaluate.call(
-				checkContext,
-				vNode.actualNode,
-				options,
-				vNode
-			)
+			axe.testUtils
+				.getCheckEvaluate('aria-required-attr')
+				.call(checkContext, vNode.actualNode, options, vNode)
 		);
 		assert.isNull(checkContext._data);
 	});
@@ -43,12 +37,9 @@ describe('aria-required-attr', function() {
 		var vNode = queryFixture('<input id="target" type="range" role="slider">');
 
 		assert.isTrue(
-			checks['aria-required-attr'].evaluate.call(
-				checkContext,
-				vNode.actualNode,
-				options,
-				vNode
-			)
+			axe.testUtils
+				.getCheckEvaluate('aria-required-attr')
+				.call(checkContext, vNode.actualNode, options, vNode)
 		);
 	});
 
@@ -68,12 +59,9 @@ describe('aria-required-attr', function() {
 				mccheddarton: ['aria-snuggles']
 			};
 			assert.isFalse(
-				checks['aria-required-attr'].evaluate.call(
-					checkContext,
-					vNode.actualNode,
-					options,
-					vNode
-				)
+				axe.testUtils
+					.getCheckEvaluate('aria-required-attr')
+					.call(checkContext, vNode.actualNode, options, vNode)
 			);
 			assert.deepEqual(checkContext._data, ['aria-snuggles', 'aria-valuemax']);
 			delete axe.commons.aria.lookupTable.role.mccheddarton;
diff --git a/test/checks/aria/required-children.js b/test/checks/aria/required-children.js
index 44460ed8a0..f3aeff8ef7 100644
--- a/test/checks/aria/required-children.js
+++ b/test/checks/aria/required-children.js
@@ -18,7 +18,9 @@ describe('aria-required-children', function() {
 		);
 
 		assert.isFalse(
-			checks['aria-required-children'].evaluate.apply(checkContext, params)
+			axe.testUtils
+				.getCheckEvaluate('aria-required-children')
+				.apply(checkContext, params)
 		);
 		assert.deepEqual(checkContext._data, ['listitem']);
 	});
@@ -37,7 +39,9 @@ describe('aria-required-children', function() {
 
 			var params = [target, undefined, virtualTarget];
 			assert.isFalse(
-				checks['aria-required-children'].evaluate.apply(checkContext, params)
+				axe.testUtils
+					.getCheckEvaluate('aria-required-children')
+					.apply(checkContext, params)
 			);
 			assert.deepEqual(checkContext._data, ['listitem']);
 		}
@@ -49,7 +53,9 @@ describe('aria-required-children', function() {
 		);
 
 		assert.isFalse(
-			checks['aria-required-children'].evaluate.apply(checkContext, params)
+			axe.testUtils
+				.getCheckEvaluate('aria-required-children')
+				.apply(checkContext, params)
 		);
 		assert.deepEqual(checkContext._data, ['rowgroup', 'row']);
 	});
@@ -68,7 +74,9 @@ describe('aria-required-children', function() {
 
 			var params = [target, undefined, virtualTarget];
 			assert.isFalse(
-				checks['aria-required-children'].evaluate.apply(checkContext, params)
+				axe.testUtils
+					.getCheckEvaluate('aria-required-children')
+					.apply(checkContext, params)
 			);
 			assert.deepEqual(checkContext._data, ['rowgroup', 'row']);
 		}
@@ -79,7 +87,9 @@ describe('aria-required-children', function() {
 			'<div role="combobox" id="target" aria-expanded="true"><p>Nothing here.</p></div>'
 		);
 		assert.isFalse(
-			checks['aria-required-children'].evaluate.apply(checkContext, params)
+			axe.testUtils
+				.getCheckEvaluate('aria-required-children')
+				.apply(checkContext, params)
 		);
 		assert.deepEqual(checkContext._data, ['listbox', 'textbox']);
 	});
@@ -89,7 +99,9 @@ describe('aria-required-children', function() {
 			'<div role="combobox" id="target" aria-expanded="true"><p role="listbox">Nothing here.</p></div>'
 		);
 		assert.isFalse(
-			checks['aria-required-children'].evaluate.apply(checkContext, params)
+			axe.testUtils
+				.getCheckEvaluate('aria-required-children')
+				.apply(checkContext, params)
 		);
 		assert.deepEqual(checkContext._data, ['textbox']);
 	});
@@ -99,7 +111,9 @@ describe('aria-required-children', function() {
 			'<div role="combobox" id="target"><p role="listbox">Nothing here.</p><p role="textbox">Textbox</p></div>'
 		);
 		assert.isTrue(
-			checks['aria-required-children'].evaluate.apply(checkContext, params)
+			axe.testUtils
+				.getCheckEvaluate('aria-required-children')
+				.apply(checkContext, params)
 		);
 	});
 
@@ -108,7 +122,9 @@ describe('aria-required-children', function() {
 			'<div id="target" role="menu"><li role="none"></li><li role="menuitem">Item 1</li><div role="menuitemradio">Item 2</div><div role="menuitemcheckbox">Item 3</div></div>'
 		);
 		assert.isTrue(
-			checks['aria-required-children'].evaluate.apply(checkContext, params)
+			axe.testUtils
+				.getCheckEvaluate('aria-required-children')
+				.apply(checkContext, params)
 		);
 	});
 
@@ -117,7 +133,9 @@ describe('aria-required-children', function() {
 			reviewEmpty: ['list']
 		});
 		assert.isUndefined(
-			checks['aria-required-children'].evaluate.apply(checkContext, params)
+			axe.testUtils
+				.getCheckEvaluate('aria-required-children')
+				.apply(checkContext, params)
 		);
 	});
 
@@ -127,7 +145,9 @@ describe('aria-required-children', function() {
 			{ reviewEmpty: ['list'] }
 		);
 		assert.isFalse(
-			checks['aria-required-children'].evaluate.apply(checkContext, params)
+			axe.testUtils
+				.getCheckEvaluate('aria-required-children')
+				.apply(checkContext, params)
 		);
 	});
 
@@ -137,7 +157,9 @@ describe('aria-required-children', function() {
 			{ reviewEmpty: ['list'] }
 		);
 		assert.isFalse(
-			checks['aria-required-children'].evaluate.apply(checkContext, params)
+			axe.testUtils
+				.getCheckEvaluate('aria-required-children')
+				.apply(checkContext, params)
 		);
 	});
 
@@ -156,7 +178,9 @@ describe('aria-required-children', function() {
 
 			var params = [target, undefined, virtualTarget];
 			assert.isTrue(
-				checks['aria-required-children'].evaluate.apply(checkContext, params)
+				axe.testUtils
+					.getCheckEvaluate('aria-required-children')
+					.apply(checkContext, params)
 			);
 		}
 	);
@@ -166,7 +190,9 @@ describe('aria-required-children', function() {
 			'<input type="text" role="combobox" aria-owns="listbox" id="target"><p role="listbox" id="listbox">Nothing here.</p>'
 		);
 		assert.isTrue(
-			checks['aria-required-children'].evaluate.apply(checkContext, params)
+			axe.testUtils
+				.getCheckEvaluate('aria-required-children')
+				.apply(checkContext, params)
 		);
 	});
 
@@ -175,7 +201,9 @@ describe('aria-required-children', function() {
 			'<input type="search" role="combobox" aria-owns="listbox1" id="target"><p role="listbox" id="listbox1">Nothing here.</p>'
 		);
 		assert.isTrue(
-			checks['aria-required-children'].evaluate.apply(checkContext, params)
+			axe.testUtils
+				.getCheckEvaluate('aria-required-children')
+				.apply(checkContext, params)
 		);
 	});
 
@@ -184,7 +212,9 @@ describe('aria-required-children', function() {
 			'<input type="email" role="combobox" aria-owns="listbox" id="target"><p role="listbox" id="listbox">Nothing here.</p>'
 		);
 		assert.isTrue(
-			checks['aria-required-children'].evaluate.apply(checkContext, params)
+			axe.testUtils
+				.getCheckEvaluate('aria-required-children')
+				.apply(checkContext, params)
 		);
 	});
 
@@ -193,7 +223,9 @@ describe('aria-required-children', function() {
 			'<input type="url" role="combobox" aria-owns="listbox" id="target"><p role="listbox" id="listbox">Nothing here.</p>'
 		);
 		assert.isTrue(
-			checks['aria-required-children'].evaluate.apply(checkContext, params)
+			axe.testUtils
+				.getCheckEvaluate('aria-required-children')
+				.apply(checkContext, params)
 		);
 	});
 
@@ -202,7 +234,9 @@ describe('aria-required-children', function() {
 			'<input type="tel" role="combobox" aria-owns="listbox" id="target"><p role="listbox" id="listbox">Nothing here.</p>'
 		);
 		assert.isTrue(
-			checks['aria-required-children'].evaluate.apply(checkContext, params)
+			axe.testUtils
+				.getCheckEvaluate('aria-required-children')
+				.apply(checkContext, params)
 		);
 	});
 
@@ -211,7 +245,9 @@ describe('aria-required-children', function() {
 			'<div role="combobox" id="target"><p role="textbox">Textbox</p></div>'
 		);
 		assert.isTrue(
-			checks['aria-required-children'].evaluate.apply(checkContext, params)
+			axe.testUtils
+				.getCheckEvaluate('aria-required-children')
+				.apply(checkContext, params)
 		);
 	});
 
@@ -220,7 +256,9 @@ describe('aria-required-children', function() {
 			'<div role="combobox" aria-haspopup="grid" aria-expanded="true" id="target"><p role="textbox">Textbox</p><div role="grid"></div></div>'
 		);
 		assert.isTrue(
-			checks['aria-required-children'].evaluate.apply(checkContext, params)
+			axe.testUtils
+				.getCheckEvaluate('aria-required-children')
+				.apply(checkContext, params)
 		);
 	});
 
@@ -229,7 +267,9 @@ describe('aria-required-children', function() {
 			'<div role="combobox" aria-haspopup="grid" aria-expanded="true" id="target"><p role="textbox">Textbox</p><div role="listbox"></div></div>'
 		);
 		assert.isFalse(
-			checks['aria-required-children'].evaluate.apply(checkContext, params)
+			axe.testUtils
+				.getCheckEvaluate('aria-required-children')
+				.apply(checkContext, params)
 		);
 
 		assert.deepEqual(checkContext._data, ['grid']);
@@ -240,7 +280,9 @@ describe('aria-required-children', function() {
 			'<div role="combobox" aria-haspopup="gRiD" aria-expanded="true" id="target"><p role="textbox">Textbox</p><div role="grid"></div></div>'
 		);
 		assert.isTrue(
-			checks['aria-required-children'].evaluate.apply(checkContext, params)
+			axe.testUtils
+				.getCheckEvaluate('aria-required-children')
+				.apply(checkContext, params)
 		);
 	});
 
@@ -249,7 +291,9 @@ describe('aria-required-children', function() {
 			'<div role="combobox" aria-expanded="true" id="target"><p role="textbox">Textbox</p><div role="grid"></div></div>'
 		);
 		assert.isFalse(
-			checks['aria-required-children'].evaluate.apply(checkContext, params)
+			axe.testUtils
+				.getCheckEvaluate('aria-required-children')
+				.apply(checkContext, params)
 		);
 
 		assert.deepEqual(checkContext._data, ['listbox']);
@@ -260,7 +304,9 @@ describe('aria-required-children', function() {
 			'<div id="target" role="list"><span>Item 1</span></div>'
 		);
 		assert.isFalse(
-			checks['aria-required-children'].evaluate.apply(checkContext, params)
+			axe.testUtils
+				.getCheckEvaluate('aria-required-children')
+				.apply(checkContext, params)
 		);
 
 		assert.deepEqual(checkContext._data, ['listitem']);
@@ -271,7 +317,9 @@ describe('aria-required-children', function() {
 			'<div id="target" role="list"><div role="tabpanel"><div role="listitem">List item 1</div></div></div>'
 		);
 		assert.isFalse(
-			checks['aria-required-children'].evaluate.apply(checkContext, params)
+			axe.testUtils
+				.getCheckEvaluate('aria-required-children')
+				.apply(checkContext, params)
 		);
 
 		assert.deepEqual(checkContext._data, ['listitem']);
@@ -282,7 +330,9 @@ describe('aria-required-children', function() {
 			'<div  role="grid"><div role="row" id="target"><span>Item 1</span></div></div>'
 		);
 		assert.isFalse(
-			checks['aria-required-children'].evaluate.apply(checkContext, params)
+			axe.testUtils
+				.getCheckEvaluate('aria-required-children')
+				.apply(checkContext, params)
 		);
 
 		assert.includeMembers(checkContext._data, ['cell']);
@@ -293,7 +343,9 @@ describe('aria-required-children', function() {
 			'<div role="grid" id="target" aria-owns="r"></div><div id="r"><div role="row">Nothing here.</div></div>'
 		);
 		assert.isTrue(
-			checks['aria-required-children'].evaluate.apply(checkContext, params)
+			axe.testUtils
+				.getCheckEvaluate('aria-required-children')
+				.apply(checkContext, params)
 		);
 	});
 
@@ -302,7 +354,9 @@ describe('aria-required-children', function() {
 			'<div role="grid" id="target" aria-owns="nonexistent"></div>'
 		);
 		assert.isFalse(
-			checks['aria-required-children'].evaluate.apply(checkContext, params)
+			axe.testUtils
+				.getCheckEvaluate('aria-required-children')
+				.apply(checkContext, params)
 		);
 	});
 
@@ -311,7 +365,9 @@ describe('aria-required-children', function() {
 			'<div role="grid" id="target" aria-owns="r"></div><p id="r" role="row">Nothing here.</p>'
 		);
 		assert.isTrue(
-			checks['aria-required-children'].evaluate.apply(checkContext, params)
+			axe.testUtils
+				.getCheckEvaluate('aria-required-children')
+				.apply(checkContext, params)
 		);
 	});
 
@@ -320,7 +376,9 @@ describe('aria-required-children', function() {
 			'<div id="target" role="list" aria-owns="list"></div><div id="list"><div role="tabpanel"><div role="listitem"></div></div></div>'
 		);
 		assert.isFalse(
-			checks['aria-required-children'].evaluate.apply(checkContext, params)
+			axe.testUtils
+				.getCheckEvaluate('aria-required-children')
+				.apply(checkContext, params)
 		);
 	});
 
@@ -329,7 +387,9 @@ describe('aria-required-children', function() {
 			'<ul id="target" role="tablist"><li role="tab">Tab 1</li><li role="tab">Tab 2</li></ul>'
 		);
 		assert.isTrue(
-			checks['aria-required-children'].evaluate.apply(checkContext, params)
+			axe.testUtils
+				.getCheckEvaluate('aria-required-children')
+				.apply(checkContext, params)
 		);
 	});
 
@@ -338,7 +398,9 @@ describe('aria-required-children', function() {
 			'<table id="target" role="grid"><tr role="row"><td role="cell">Item 1</td></tr></table>'
 		);
 		assert.isTrue(
-			checks['aria-required-children'].evaluate.apply(checkContext, params)
+			axe.testUtils
+				.getCheckEvaluate('aria-required-children')
+				.apply(checkContext, params)
 		);
 	});
 
@@ -347,7 +409,9 @@ describe('aria-required-children', function() {
 			'<div role="grid" id="target"><p role="row">Nothing here.</p></div>'
 		);
 		assert.isTrue(
-			checks['aria-required-children'].evaluate.apply(checkContext, params)
+			axe.testUtils
+				.getCheckEvaluate('aria-required-children')
+				.apply(checkContext, params)
 		);
 	});
 
@@ -356,7 +420,9 @@ describe('aria-required-children', function() {
 			'<table id="target"><p role="row">Nothing here.</p></table>'
 		);
 		assert.isTrue(
-			checks['aria-required-children'].evaluate.apply(checkContext, params)
+			axe.testUtils
+				.getCheckEvaluate('aria-required-children')
+				.apply(checkContext, params)
 		);
 	});
 
@@ -365,7 +431,9 @@ describe('aria-required-children', function() {
 			'<table role="grid" id="target"><tr><td>Nothing here.</td></tr></table>'
 		);
 		assert.isTrue(
-			checks['aria-required-children'].evaluate.apply(checkContext, params)
+			axe.testUtils
+				.getCheckEvaluate('aria-required-children')
+				.apply(checkContext, params)
 		);
 	});
 
@@ -374,7 +442,9 @@ describe('aria-required-children', function() {
 			'<div role="list" id="target"><p role="listitem">Nothing here.</p></div>'
 		);
 		assert.isTrue(
-			checks['aria-required-children'].evaluate.apply(checkContext, params)
+			axe.testUtils
+				.getCheckEvaluate('aria-required-children')
+				.apply(checkContext, params)
 		);
 	});
 
@@ -383,7 +453,9 @@ describe('aria-required-children', function() {
 			'<div role="list" id="target"><p>Just a regular ol p that contains a... <p role="listitem">Nothing here.</p></p></div>'
 		);
 		assert.isTrue(
-			checks['aria-required-children'].evaluate.apply(checkContext, params)
+			axe.testUtils
+				.getCheckEvaluate('aria-required-children')
+				.apply(checkContext, params)
 		);
 	});
 
@@ -392,7 +464,9 @@ describe('aria-required-children', function() {
 			'<div role="listitem" id="target"><p>Nothing here.</p></div>'
 		);
 		assert.isTrue(
-			checks['aria-required-children'].evaluate.apply(checkContext, params)
+			axe.testUtils
+				.getCheckEvaluate('aria-required-children')
+				.apply(checkContext, params)
 		);
 	});
 
@@ -401,7 +475,9 @@ describe('aria-required-children', function() {
 			'<div role="combobox" id="target"><input type="search"><p role="listbox">Textbox</p></div>'
 		);
 		assert.isTrue(
-			checks['aria-required-children'].evaluate.apply(checkContext, params)
+			axe.testUtils
+				.getCheckEvaluate('aria-required-children')
+				.apply(checkContext, params)
 		);
 	});
 
@@ -410,15 +486,21 @@ describe('aria-required-children', function() {
 			'<div role="combobox" id="target"><input type="search" role="spinbutton"><p role="listbox">Textbox</p></div>'
 		);
 		assert.isFalse(
-			checks['aria-required-children'].evaluate.apply(checkContext, params)
+			axe.testUtils
+				.getCheckEvaluate('aria-required-children')
+				.apply(checkContext, params)
 		);
 	});
 
 	describe('options', function() {
 		it('should return undefined instead of false when the role is in options.reviewEmpty', function() {
-			var params = checkSetup('<div role="grid" id="target"></div>');
+			var params = checkSetup('<div role="grid" id="target"></div>', {
+				reviewEmpty: []
+			});
 			assert.isFalse(
-				checks['aria-required-children'].evaluate.apply(checkContext, params)
+				axe.testUtils
+					.getCheckEvaluate('aria-required-children')
+					.apply(checkContext, params)
 			);
 
 			// Options:
@@ -426,29 +508,37 @@ describe('aria-required-children', function() {
 				reviewEmpty: ['grid']
 			};
 			assert.isUndefined(
-				checks['aria-required-children'].evaluate.apply(checkContext, params)
+				axe.testUtils
+					.getCheckEvaluate('aria-required-children')
+					.apply(checkContext, params)
 			);
 		});
 
 		it('should not throw when options is incorrect', function() {
-			var params = checkSetup('<div role="grid" id="target"></div>');
+			var params = checkSetup('<div role="menu" id="target"></div>');
 
 			// Options: (incorrect)
-			params[1] = ['grid'];
+			params[1] = ['menu'];
 			assert.isFalse(
-				checks['aria-required-children'].evaluate.apply(checkContext, params)
+				axe.testUtils
+					.getCheckEvaluate('aria-required-children')
+					.apply(checkContext, params)
 			);
 
 			// Options: (incorrect)
 			params[1] = null;
 			assert.isFalse(
-				checks['aria-required-children'].evaluate.apply(checkContext, params)
+				axe.testUtils
+					.getCheckEvaluate('aria-required-children')
+					.apply(checkContext, params)
 			);
 
 			// Options: (incorrect)
-			params[1] = 'grid';
+			params[1] = 'menu';
 			assert.isFalse(
-				checks['aria-required-children'].evaluate.apply(checkContext, params)
+				axe.testUtils
+					.getCheckEvaluate('aria-required-children')
+					.apply(checkContext, params)
 			);
 		});
 
@@ -460,7 +550,9 @@ describe('aria-required-children', function() {
 				reviewEmpty: ['listbox']
 			};
 			assert.isUndefined(
-				checks['aria-required-children'].evaluate.apply(checkContext, params)
+				axe.testUtils
+					.getCheckEvaluate('aria-required-children')
+					.apply(checkContext, params)
 			);
 		});
 
@@ -472,7 +564,9 @@ describe('aria-required-children', function() {
 				reviewEmpty: ['listbox']
 			};
 			assert.isFalse(
-				checks['aria-required-children'].evaluate.apply(checkContext, params)
+				axe.testUtils
+					.getCheckEvaluate('aria-required-children')
+					.apply(checkContext, params)
 			);
 		});
 
@@ -484,7 +578,9 @@ describe('aria-required-children', function() {
 				reviewEmpty: ['listbox']
 			};
 			assert.isUndefined(
-				checks['aria-required-children'].evaluate.apply(checkContext, params)
+				axe.testUtils
+					.getCheckEvaluate('aria-required-children')
+					.apply(checkContext, params)
 			);
 		});
 
@@ -496,7 +592,9 @@ describe('aria-required-children', function() {
 				reviewEmpty: ['listbox']
 			};
 			assert.isUndefined(
-				checks['aria-required-children'].evaluate.apply(checkContext, params)
+				axe.testUtils
+					.getCheckEvaluate('aria-required-children')
+					.apply(checkContext, params)
 			);
 		});
 
@@ -508,7 +606,9 @@ describe('aria-required-children', function() {
 				reviewEmpty: ['listbox']
 			};
 			assert.isUndefined(
-				checks['aria-required-children'].evaluate.apply(checkContext, params)
+				axe.testUtils
+					.getCheckEvaluate('aria-required-children')
+					.apply(checkContext, params)
 			);
 		});
 	});
diff --git a/test/checks/aria/required-parent.js b/test/checks/aria/required-parent.js
index 170094e6ee..e082aa8b1c 100644
--- a/test/checks/aria/required-parent.js
+++ b/test/checks/aria/required-parent.js
@@ -17,7 +17,9 @@ describe('aria-required-parent', function() {
 			'<div><p role="listitem" id="target">Nothing here.</p></div>'
 		);
 		assert.isFalse(
-			checks['aria-required-parent'].evaluate.apply(checkContext, params)
+			axe.testUtils
+				.getCheckEvaluate('aria-required-parent')
+				.apply(checkContext, params)
 		);
 		assert.deepEqual(checkContext._data, ['list']);
 	});
@@ -38,7 +40,9 @@ describe('aria-required-parent', function() {
 
 			var params = [shadowContent, undefined, virtualTarget];
 			assert.isFalse(
-				checks['aria-required-parent'].evaluate.apply(checkContext, params)
+				axe.testUtils
+					.getCheckEvaluate('aria-required-parent')
+					.apply(checkContext, params)
 			);
 			assert.deepEqual(checkContext._data, ['list']);
 		}
@@ -50,7 +54,9 @@ describe('aria-required-parent', function() {
 			'<div id="parent"><p role="listitem" id="target">Nothing here.</p></div>';
 		var params = checkSetup(snippet);
 		assert.isTrue(
-			checks['aria-required-parent'].evaluate.apply(checkContext, params)
+			axe.testUtils
+				.getCheckEvaluate('aria-required-parent')
+				.apply(checkContext, params)
 		);
 	});
 
@@ -60,7 +66,9 @@ describe('aria-required-parent', function() {
 				'<div><p role="listitem" id="target">Nothing here.</p></div>'
 		);
 		assert.isFalse(
-			checks['aria-required-parent'].evaluate.apply(checkContext, params)
+			axe.testUtils
+				.getCheckEvaluate('aria-required-parent')
+				.apply(checkContext, params)
 		);
 		assert.deepEqual(checkContext._data, ['list']);
 	});
@@ -70,7 +78,9 @@ describe('aria-required-parent', function() {
 			'<div role="list" aria-owns="target"></div><div><p role="listitem" id="target">Nothing here.</p></div>'
 		);
 		assert.isTrue(
-			checks['aria-required-parent'].evaluate.apply(checkContext, params)
+			axe.testUtils
+				.getCheckEvaluate('aria-required-parent')
+				.apply(checkContext, params)
 		);
 	});
 
@@ -79,7 +89,9 @@ describe('aria-required-parent', function() {
 			'<div role="grid"><p role="row" id="target">Nothing here.</p></div>'
 		);
 		assert.isTrue(
-			checks['aria-required-parent'].evaluate.apply(checkContext, params)
+			axe.testUtils
+				.getCheckEvaluate('aria-required-parent')
+				.apply(checkContext, params)
 		);
 	});
 
@@ -88,7 +100,9 @@ describe('aria-required-parent', function() {
 			'<div role="list"><p role="listitem" id="target">Nothing here.</p></div>'
 		);
 		assert.isTrue(
-			checks['aria-required-parent'].evaluate.apply(checkContext, params)
+			axe.testUtils
+				.getCheckEvaluate('aria-required-parent')
+				.apply(checkContext, params)
 		);
 	});
 
@@ -108,7 +122,9 @@ describe('aria-required-parent', function() {
 
 			var params = [shadowContent, undefined, virtualTarget];
 			assert.isTrue(
-				checks['aria-required-parent'].evaluate.apply(checkContext, params)
+				axe.testUtils
+					.getCheckEvaluate('aria-required-parent')
+					.apply(checkContext, params)
 			);
 		}
 	);
@@ -130,7 +146,9 @@ describe('aria-required-parent', function() {
 
 			var params = [shadowContent, undefined, virtualTarget];
 			assert.isFalse(
-				checks['aria-required-parent'].evaluate.apply(checkContext, params)
+				axe.testUtils
+					.getCheckEvaluate('aria-required-parent')
+					.apply(checkContext, params)
 			);
 		}
 	);
diff --git a/test/checks/aria/valid-attr-value.js b/test/checks/aria/valid-attr-value.js
index c9f7a9fced..64d3b82994 100644
--- a/test/checks/aria/valid-attr-value.js
+++ b/test/checks/aria/valid-attr-value.js
@@ -19,7 +19,9 @@ describe('aria-valid-attr-value', function() {
 		fixture.appendChild(node);
 
 		assert.isTrue(
-			checks['aria-valid-attr-value'].evaluate.call(checkContext, node)
+			axe.testUtils
+				.getCheckEvaluate('aria-valid-attr-value')
+				.call(checkContext, node)
 		);
 		assert.isNull(checkContext._data);
 	});
@@ -34,7 +36,9 @@ describe('aria-valid-attr-value', function() {
 		fixture.appendChild(node);
 
 		assert.isTrue(
-			checks['aria-valid-attr-value'].evaluate.call(checkContext, node)
+			axe.testUtils
+				.getCheckEvaluate('aria-valid-attr-value')
+				.call(checkContext, node)
 		);
 		assert.isNull(checkContext._data);
 	});
@@ -56,7 +60,9 @@ describe('aria-valid-attr-value', function() {
 		fixture.appendChild(testTgt2);
 
 		assert.isTrue(
-			checks['aria-valid-attr-value'].evaluate.call(checkContext, node)
+			axe.testUtils
+				.getCheckEvaluate('aria-valid-attr-value')
+				.call(checkContext, node)
 		);
 		assert.isNull(checkContext._data);
 	});
@@ -70,7 +76,9 @@ describe('aria-valid-attr-value', function() {
 		fixture.appendChild(node);
 
 		assert.isFalse(
-			checks['aria-valid-attr-value'].evaluate.call(checkContext, node)
+			axe.testUtils
+				.getCheckEvaluate('aria-valid-attr-value')
+				.call(checkContext, node)
 		);
 		assert.deepEqual(checkContext._data, ['aria-selected="0"']);
 	});
@@ -83,10 +91,14 @@ describe('aria-valid-attr-value', function() {
 		var passing1 = fixture.querySelector('button');
 		var passing2 = fixture.querySelector('div');
 		assert.isTrue(
-			checks['aria-valid-attr-value'].evaluate.call(checkContext, passing1)
+			axe.testUtils
+				.getCheckEvaluate('aria-valid-attr-value')
+				.call(checkContext, passing1)
 		);
 		assert.isTrue(
-			checks['aria-valid-attr-value'].evaluate.call(checkContext, passing2)
+			axe.testUtils
+				.getCheckEvaluate('aria-valid-attr-value')
+				.call(checkContext, passing2)
 		);
 	});
 
@@ -97,10 +109,14 @@ describe('aria-valid-attr-value', function() {
 		var passing1 = fixture.querySelector('button');
 		var passing2 = fixture.querySelector('div');
 		assert.isTrue(
-			checks['aria-valid-attr-value'].evaluate.call(checkContext, passing1)
+			axe.testUtils
+				.getCheckEvaluate('aria-valid-attr-value')
+				.call(checkContext, passing1)
 		);
 		assert.isTrue(
-			checks['aria-valid-attr-value'].evaluate.call(checkContext, passing2)
+			axe.testUtils
+				.getCheckEvaluate('aria-valid-attr-value')
+				.call(checkContext, passing2)
 		);
 	});
 
@@ -110,7 +126,9 @@ describe('aria-valid-attr-value', function() {
 		);
 		var passing1 = fixture.querySelector('button');
 		assert.isTrue(
-			checks['aria-valid-attr-value'].evaluate.call(checkContext, passing1)
+			axe.testUtils
+				.getCheckEvaluate('aria-valid-attr-value')
+				.call(checkContext, passing1)
 		);
 	});
 
@@ -120,7 +138,9 @@ describe('aria-valid-attr-value', function() {
 		);
 		var passing1 = fixture.querySelector('button');
 		assert.isTrue(
-			checks['aria-valid-attr-value'].evaluate.call(checkContext, passing1)
+			axe.testUtils
+				.getCheckEvaluate('aria-valid-attr-value')
+				.call(checkContext, passing1)
 		);
 	});
 
@@ -130,7 +150,9 @@ describe('aria-valid-attr-value', function() {
 		);
 		var failing1 = fixture.querySelector('button');
 		assert.isFalse(
-			checks['aria-valid-attr-value'].evaluate.call(checkContext, failing1)
+			axe.testUtils
+				.getCheckEvaluate('aria-valid-attr-value')
+				.call(checkContext, failing1)
 		);
 	});
 
@@ -140,7 +162,9 @@ describe('aria-valid-attr-value', function() {
 		);
 		var failing1 = fixture.querySelector('button');
 		assert.isFalse(
-			checks['aria-valid-attr-value'].evaluate.call(checkContext, failing1)
+			axe.testUtils
+				.getCheckEvaluate('aria-valid-attr-value')
+				.call(checkContext, failing1)
 		);
 	});
 
@@ -148,7 +172,9 @@ describe('aria-valid-attr-value', function() {
 		fixtureSetup('<button aria-controls="test">Button</button>');
 		var failing1 = fixture.querySelector('button');
 		assert.isFalse(
-			checks['aria-valid-attr-value'].evaluate.call(checkContext, failing1)
+			axe.testUtils
+				.getCheckEvaluate('aria-valid-attr-value')
+				.call(checkContext, failing1)
 		);
 	});
 
@@ -158,7 +184,9 @@ describe('aria-valid-attr-value', function() {
 		);
 		var passing1 = fixture.querySelector('button');
 		assert.isTrue(
-			checks['aria-valid-attr-value'].evaluate.call(checkContext, passing1)
+			axe.testUtils
+				.getCheckEvaluate('aria-valid-attr-value')
+				.call(checkContext, passing1)
 		);
 	});
 
@@ -168,7 +196,9 @@ describe('aria-valid-attr-value', function() {
 		);
 		var failing1 = fixture.querySelector('button');
 		assert.isFalse(
-			checks['aria-valid-attr-value'].evaluate.call(checkContext, failing1)
+			axe.testUtils
+				.getCheckEvaluate('aria-valid-attr-value')
+				.call(checkContext, failing1)
 		);
 	});
 
@@ -176,7 +206,9 @@ describe('aria-valid-attr-value', function() {
 		fixtureSetup('<button aria-owns="test">Button</button>');
 		var failing1 = fixture.querySelector('button');
 		assert.isFalse(
-			checks['aria-valid-attr-value'].evaluate.call(checkContext, failing1)
+			axe.testUtils
+				.getCheckEvaluate('aria-valid-attr-value')
+				.call(checkContext, failing1)
 		);
 	});
 
@@ -184,7 +216,9 @@ describe('aria-valid-attr-value', function() {
 		fixtureSetup('<button aria-describedby="test">Button</button>');
 		var undefined1 = fixture.querySelector('button');
 		assert.isUndefined(
-			checks['aria-valid-attr-value'].evaluate.call(checkContext, undefined1)
+			axe.testUtils
+				.getCheckEvaluate('aria-valid-attr-value')
+				.call(checkContext, undefined1)
 		);
 	});
 
@@ -192,7 +226,9 @@ describe('aria-valid-attr-value', function() {
 		fixtureSetup('<button aria-current="test">Button</button>');
 		var undefined1 = fixture.querySelector('button');
 		assert.isUndefined(
-			checks['aria-valid-attr-value'].evaluate.call(checkContext, undefined1)
+			axe.testUtils
+				.getCheckEvaluate('aria-valid-attr-value')
+				.call(checkContext, undefined1)
 		);
 	});
 
@@ -202,10 +238,9 @@ describe('aria-valid-attr-value', function() {
 				'<div id="target" aria-live="nope" aria-describedby="no exist k thx"></div>';
 			var target = fixture.querySelector('#target');
 			assert.isTrue(
-				checks['aria-valid-attr-value'].evaluate.call(checkContext, target, [
-					'aria-live',
-					'aria-describedby'
-				])
+				axe.testUtils
+					.getCheckEvaluate('aria-valid-attr-value')
+					.call(checkContext, target, ['aria-live', 'aria-describedby'])
 			);
 		});
 	});
diff --git a/test/checks/aria/valid-attr.js b/test/checks/aria/valid-attr.js
index 715595098d..fe9910fa1b 100644
--- a/test/checks/aria/valid-attr.js
+++ b/test/checks/aria/valid-attr.js
@@ -17,7 +17,9 @@ describe('aria-valid-attr', function() {
 		node.setAttribute('aria-dogs', 'true');
 		fixture.appendChild(node);
 
-		assert.isFalse(checks['aria-valid-attr'].evaluate.call(checkContext, node));
+		assert.isFalse(
+			axe.testUtils.getCheckEvaluate('aria-valid-attr').call(checkContext, node)
+		);
 		assert.deepEqual(checkContext._data, ['aria-cats', 'aria-dogs']);
 	});
 
@@ -28,7 +30,9 @@ describe('aria-valid-attr', function() {
 		node.setAttribute('aria-selected', 'true');
 		fixture.appendChild(node);
 
-		assert.isTrue(checks['aria-valid-attr'].evaluate.call(checkContext, node));
+		assert.isTrue(
+			axe.testUtils.getCheckEvaluate('aria-valid-attr').call(checkContext, node)
+		);
 		assert.isNull(checkContext._data);
 	});
 
@@ -43,7 +47,9 @@ describe('aria-valid-attr', function() {
 		node.setAttribute('aria-mccheddarton', 'true');
 		fixture.appendChild(node);
 
-		assert.isTrue(checks['aria-valid-attr'].evaluate.call(checkContext, node));
+		assert.isTrue(
+			axe.testUtils.getCheckEvaluate('aria-valid-attr').call(checkContext, node)
+		);
 		assert.isNull(checkContext._data);
 	});
 
@@ -53,10 +59,9 @@ describe('aria-valid-attr', function() {
 				'<div id="target" aria-bats="cats" aria-puppies="2"></div>';
 			var target = fixture.children[0];
 			assert.isTrue(
-				checks['aria-valid-attr'].evaluate.call(checkContext, target, [
-					'aria-bats',
-					'aria-puppies'
-				])
+				axe.testUtils
+					.getCheckEvaluate('aria-valid-attr')
+					.call(checkContext, target, ['aria-bats', 'aria-puppies'])
 			);
 		});
 	});
diff --git a/test/checks/aria/valid-scrollable-semantics.js b/test/checks/aria/valid-scrollable-semantics.js
index 763eff501b..6f9d551e82 100644
--- a/test/checks/aria/valid-scrollable-semantics.js
+++ b/test/checks/aria/valid-scrollable-semantics.js
@@ -14,7 +14,9 @@ describe('valid-scrollable-semantics', function() {
 		node.setAttribute('role', '"banner');
 		fixture.appendChild(node);
 		assert.isFalse(
-			checks['valid-scrollable-semantics'].evaluate.call(checkContext, node)
+			axe.testUtils
+				.getCheckEvaluate('valid-scrollable-semantics')
+				.call(checkContext, node)
 		);
 	});
 
@@ -23,7 +25,9 @@ describe('valid-scrollable-semantics', function() {
 		node.setAttribute('role', 'search');
 		fixture.appendChild(node);
 		assert.isFalse(
-			checks['valid-scrollable-semantics'].evaluate.call(checkContext, node)
+			axe.testUtils
+				.getCheckEvaluate('valid-scrollable-semantics')
+				.call(checkContext, node)
 		);
 	});
 
@@ -32,7 +36,9 @@ describe('valid-scrollable-semantics', function() {
 		node.setAttribute('role', 'form');
 		fixture.appendChild(node);
 		assert.isTrue(
-			checks['valid-scrollable-semantics'].evaluate.call(checkContext, node)
+			axe.testUtils
+				.getCheckEvaluate('valid-scrollable-semantics')
+				.call(checkContext, node)
 		);
 	});
 
@@ -41,7 +47,9 @@ describe('valid-scrollable-semantics', function() {
 		node.setAttribute('role', 'navigation');
 		fixture.appendChild(node);
 		assert.isTrue(
-			checks['valid-scrollable-semantics'].evaluate.call(checkContext, node)
+			axe.testUtils
+				.getCheckEvaluate('valid-scrollable-semantics')
+				.call(checkContext, node)
 		);
 	});
 
@@ -50,7 +58,9 @@ describe('valid-scrollable-semantics', function() {
 		node.setAttribute('role', 'complementary');
 		fixture.appendChild(node);
 		assert.isTrue(
-			checks['valid-scrollable-semantics'].evaluate.call(checkContext, node)
+			axe.testUtils
+				.getCheckEvaluate('valid-scrollable-semantics')
+				.call(checkContext, node)
 		);
 	});
 
@@ -59,7 +69,9 @@ describe('valid-scrollable-semantics', function() {
 		node.setAttribute('role', 'contentinfo');
 		fixture.appendChild(node);
 		assert.isTrue(
-			checks['valid-scrollable-semantics'].evaluate.call(checkContext, node)
+			axe.testUtils
+				.getCheckEvaluate('valid-scrollable-semantics')
+				.call(checkContext, node)
 		);
 	});
 
@@ -68,7 +80,9 @@ describe('valid-scrollable-semantics', function() {
 		node.setAttribute('role', 'main');
 		fixture.appendChild(node);
 		assert.isTrue(
-			checks['valid-scrollable-semantics'].evaluate.call(checkContext, node)
+			axe.testUtils
+				.getCheckEvaluate('valid-scrollable-semantics')
+				.call(checkContext, node)
 		);
 	});
 
@@ -77,7 +91,9 @@ describe('valid-scrollable-semantics', function() {
 		node.setAttribute('role', 'region');
 		fixture.appendChild(node);
 		assert.isTrue(
-			checks['valid-scrollable-semantics'].evaluate.call(checkContext, node)
+			axe.testUtils
+				.getCheckEvaluate('valid-scrollable-semantics')
+				.call(checkContext, node)
 		);
 	});
 
@@ -85,7 +101,9 @@ describe('valid-scrollable-semantics', function() {
 		var node = document.createElement('nav');
 		fixture.appendChild(node);
 		assert.isTrue(
-			checks['valid-scrollable-semantics'].evaluate.call(checkContext, node)
+			axe.testUtils
+				.getCheckEvaluate('valid-scrollable-semantics')
+				.call(checkContext, node)
 		);
 	});
 
@@ -93,7 +111,9 @@ describe('valid-scrollable-semantics', function() {
 		var node = document.createElement('section');
 		fixture.appendChild(node);
 		assert.isTrue(
-			checks['valid-scrollable-semantics'].evaluate.call(checkContext, node)
+			axe.testUtils
+				.getCheckEvaluate('valid-scrollable-semantics')
+				.call(checkContext, node)
 		);
 	});
 
@@ -101,7 +121,9 @@ describe('valid-scrollable-semantics', function() {
 		var node = document.createElement('article');
 		fixture.appendChild(node);
 		assert.isTrue(
-			checks['valid-scrollable-semantics'].evaluate.call(checkContext, node)
+			axe.testUtils
+				.getCheckEvaluate('valid-scrollable-semantics')
+				.call(checkContext, node)
 		);
 	});
 
@@ -109,7 +131,9 @@ describe('valid-scrollable-semantics', function() {
 		var node = document.createElement('aside');
 		fixture.appendChild(node);
 		assert.isTrue(
-			checks['valid-scrollable-semantics'].evaluate.call(checkContext, node)
+			axe.testUtils
+				.getCheckEvaluate('valid-scrollable-semantics')
+				.call(checkContext, node)
 		);
 	});
 });
diff --git a/test/checks/color/color-contrast.js b/test/checks/color/color-contrast.js
index d02ae80aa9..6ddff6fc3e 100644
--- a/test/checks/color/color-contrast.js
+++ b/test/checks/color/color-contrast.js
@@ -7,7 +7,7 @@ describe('color-contrast', function() {
 	var shadowSupported = axe.testUtils.shadowSupport.v1;
 	var shadowCheckSetup = axe.testUtils.shadowCheckSetup;
 	var checkContext = axe.testUtils.MockCheckContext();
-	var contrastEvaluate = checks['color-contrast'].evaluate;
+	var contrastEvaluate = axe.testUtils.getCheckEvaluate('color-contrast');
 
 	afterEach(function() {
 		fixture.innerHTML = '';
diff --git a/test/checks/color/link-in-text-block.js b/test/checks/color/link-in-text-block.js
index 78dddeb267..ce4f7e2baa 100644
--- a/test/checks/color/link-in-text-block.js
+++ b/test/checks/color/link-in-text-block.js
@@ -99,7 +99,9 @@ describe('link-in-text-block', function() {
 			}
 		);
 		assert.isTrue(
-			checks['link-in-text-block'].evaluate.call(checkContext, linkElm)
+			axe.testUtils
+				.getCheckEvaluate('link-in-text-block')
+				.call(checkContext, linkElm)
 		);
 	});
 
@@ -122,7 +124,9 @@ describe('link-in-text-block', function() {
 			var linkElm = document.getElementById('link');
 
 			assert.isTrue(
-				checks['link-in-text-block'].evaluate.call(checkContext, linkElm)
+				axe.testUtils
+					.getCheckEvaluate('link-in-text-block')
+					.call(checkContext, linkElm)
 			);
 		});
 
@@ -139,7 +143,9 @@ describe('link-in-text-block', function() {
 				axe.testUtils.flatTreeSetup(fixture);
 
 				assert.isTrue(
-					checks['link-in-text-block'].evaluate.call(checkContext, linkElm)
+					axe.testUtils
+						.getCheckEvaluate('link-in-text-block')
+						.call(checkContext, linkElm)
 				);
 			}
 		);
@@ -158,7 +164,9 @@ describe('link-in-text-block', function() {
 				var linkElm = div.querySelector('a');
 
 				assert.isTrue(
-					checks['link-in-text-block'].evaluate.call(checkContext, linkElm)
+					axe.testUtils
+						.getCheckEvaluate('link-in-text-block')
+						.call(checkContext, linkElm)
 				);
 			}
 		);
@@ -181,7 +189,9 @@ describe('link-in-text-block', function() {
 				}
 			);
 			assert.isUndefined(
-				checks['link-in-text-block'].evaluate.call(checkContext, linkElm)
+				axe.testUtils
+					.getCheckEvaluate('link-in-text-block')
+					.call(checkContext, linkElm)
 			);
 		});
 
@@ -195,7 +205,9 @@ describe('link-in-text-block', function() {
 				}
 			);
 			assert.isFalse(
-				checks['link-in-text-block'].evaluate.call(checkContext, linkElm)
+				axe.testUtils
+					.getCheckEvaluate('link-in-text-block')
+					.call(checkContext, linkElm)
 			);
 		});
 
@@ -211,7 +223,9 @@ describe('link-in-text-block', function() {
 				}
 			);
 			assert.isUndefined(
-				checks['link-in-text-block'].evaluate.call(checkContext, linkElm)
+				axe.testUtils
+					.getCheckEvaluate('link-in-text-block')
+					.call(checkContext, linkElm)
 			);
 			assert.equal(checkContext._data.messageKey, 'bgContrast');
 		});
@@ -228,7 +242,9 @@ describe('link-in-text-block', function() {
 				}
 			);
 			assert.isFalse(
-				checks['link-in-text-block'].evaluate.call(checkContext, linkElm)
+				axe.testUtils
+					.getCheckEvaluate('link-in-text-block')
+					.call(checkContext, linkElm)
 			);
 		});
 
@@ -245,7 +261,9 @@ describe('link-in-text-block', function() {
 				}
 			);
 			assert.isUndefined(
-				checks['link-in-text-block'].evaluate.call(checkContext, linkElm)
+				axe.testUtils
+					.getCheckEvaluate('link-in-text-block')
+					.call(checkContext, linkElm)
 			);
 			assert.equal(checkContext._data.messageKey, 'bgImage');
 		});
@@ -264,7 +282,9 @@ describe('link-in-text-block', function() {
 			}
 		);
 		assert.isUndefined(
-			checks['link-in-text-block'].evaluate.call(checkContext, linkElm)
+			axe.testUtils
+				.getCheckEvaluate('link-in-text-block')
+				.call(checkContext, linkElm)
 		);
 		assert.equal(checkContext._relatedNodes[0], linkElm.parentNode);
 	});
diff --git a/test/checks/forms/autocomplete-appropriate.js b/test/checks/forms/autocomplete-appropriate.js
index e2229ac7c6..42b0b3467c 100644
--- a/test/checks/forms/autocomplete-appropriate.js
+++ b/test/checks/forms/autocomplete-appropriate.js
@@ -4,7 +4,7 @@ describe('autocomplete-appropriate', function() {
 	var fixture = document.getElementById('fixture');
 	var checkSetup = axe.testUtils.checkSetup;
 	var checkContext = axe.testUtils.MockCheckContext();
-	var evaluate = checks['autocomplete-appropriate'].evaluate;
+	var evaluate = axe.testUtils.getCheckEvaluate('autocomplete-appropriate');
 
 	beforeEach(function() {
 		axe._tree = undefined;
diff --git a/test/checks/forms/autocomplete-valid.js b/test/checks/forms/autocomplete-valid.js
index c2ecdb6a28..f2a6028aef 100644
--- a/test/checks/forms/autocomplete-valid.js
+++ b/test/checks/forms/autocomplete-valid.js
@@ -4,7 +4,7 @@ describe('autocomplete-valid', function() {
 	var fixture = document.getElementById('fixture');
 	var checkSetup = axe.testUtils.checkSetup;
 	var checkContext = axe.testUtils.MockCheckContext();
-	var evaluate = checks['autocomplete-valid'].evaluate;
+	var evaluate = axe.testUtils.getCheckEvaluate('autocomplete-valid');
 
 	afterEach(function() {
 		fixture.innerHTML = '';
diff --git a/test/checks/keyboard/focusable-no-name.js b/test/checks/keyboard/focusable-no-name.js
index d62d33d87a..2d32e8bddf 100644
--- a/test/checks/keyboard/focusable-no-name.js
+++ b/test/checks/keyboard/focusable-no-name.js
@@ -17,21 +17,27 @@ describe('focusable-no-name', function() {
 	it('should pass if tabindex < 0', function() {
 		var params = checkSetup('<a href="#" tabindex="-1" id="target"></a>');
 		assert.isFalse(
-			checks['focusable-no-name'].evaluate.apply(checkContext, params)
+			axe.testUtils
+				.getCheckEvaluate('focusable-no-name')
+				.apply(checkContext, params)
 		);
 	});
 
 	it('should pass element is not natively focusable', function() {
 		var params = checkSetup('<span role="link" href="#" id="target"></span>');
 		assert.isFalse(
-			checks['focusable-no-name'].evaluate.apply(checkContext, params)
+			axe.testUtils
+				.getCheckEvaluate('focusable-no-name')
+				.apply(checkContext, params)
 		);
 	});
 
 	it('should fail if element is tabbable with no name - native', function() {
 		var params = checkSetup('<a href="#" id="target"></a>');
 		assert.isTrue(
-			checks['focusable-no-name'].evaluate.apply(checkContext, params)
+			axe.testUtils
+				.getCheckEvaluate('focusable-no-name')
+				.apply(checkContext, params)
 		);
 	});
 
@@ -40,14 +46,18 @@ describe('focusable-no-name', function() {
 			'<span tabindex="0" role="link" id="target" href="#"></spam>'
 		);
 		assert.isTrue(
-			checks['focusable-no-name'].evaluate.apply(checkContext, params)
+			axe.testUtils
+				.getCheckEvaluate('focusable-no-name')
+				.apply(checkContext, params)
 		);
 	});
 
 	it('should pass if the element is tabbable but has an accessible name', function() {
 		var params = checkSetup('<a href="#" title="Hello" id="target"></a>');
 		assert.isFalse(
-			checks['focusable-no-name'].evaluate.apply(checkContext, params)
+			axe.testUtils
+				.getCheckEvaluate('focusable-no-name')
+				.apply(checkContext, params)
 		);
 	});
 
@@ -60,7 +70,9 @@ describe('focusable-no-name', function() {
 			);
 
 			assert.isFalse(
-				checks['focusable-no-name'].evaluate.apply(checkContext, params)
+				axe.testUtils
+					.getCheckEvaluate('focusable-no-name')
+					.apply(checkContext, params)
 			);
 		}
 	);
diff --git a/test/checks/keyboard/page-has-elm.js b/test/checks/keyboard/page-has-elm.js
index ee4deacdfe..cd1d476b82 100644
--- a/test/checks/keyboard/page-has-elm.js
+++ b/test/checks/keyboard/page-has-elm.js
@@ -14,23 +14,23 @@ describe('page-has-*', function() {
 	});
 
 	describe('evaluate', function() {
-		var evaluate = checks['page-has-main'].evaluate;
+		var evaluate = axe.testUtils.getCheckEvaluate('page-has-main');
 
 		it('throws if there is no selector', function() {
 			assert.throws(function() {
 				var params = checkSetup('<div id="target">No role</div>', undefined);
-				evaluate.apply(checkContext, params);
+				checks['page-has-main'].evaluate.apply(checkContext, params);
 			});
 
 			assert.throws(function() {
 				var params = checkSetup('<div id="target">No role</div>', {});
-				evaluate.apply(checkContext, params);
+				checks['page-has-main'].evaluate.apply(checkContext, params);
 			});
 
 			assert.throws(function() {
 				var badOptions = { selector: [] };
 				var params = checkSetup('<div id="target">No role</div>', badOptions);
-				evaluate.apply(checkContext, params);
+				checks['page-has-main'].evaluate.apply(checkContext, params);
 			});
 		});
 
diff --git a/test/checks/label/duplicate-img-label.js b/test/checks/label/duplicate-img-label.js
index fb2fc34ed7..d99097c747 100644
--- a/test/checks/label/duplicate-img-label.js
+++ b/test/checks/label/duplicate-img-label.js
@@ -14,7 +14,7 @@ describe('duplicate-img-label', function() {
 		fixture.innerHTML = '<button><img id="target" alt="Plain text"></button>';
 		var node = fixture.querySelector('#target');
 		axe.testUtils.flatTreeSetup(fixture);
-		var result = checks['duplicate-img-label'].evaluate(
+		var result = axe.testUtils.getCheckEvaluate('duplicate-img-label')(
 			node,
 			undefined,
 			axe.utils.getNodeFromTree(node)
@@ -28,7 +28,7 @@ describe('duplicate-img-label', function() {
 		var node = fixture.querySelector('#target');
 		axe.testUtils.flatTreeSetup(fixture);
 		assert.isFalse(
-			checks['duplicate-img-label'].evaluate(
+			axe.testUtils.getCheckEvaluate('duplicate-img-label')(
 				node,
 				undefined,
 				axe.utils.getNodeFromTree(node)
@@ -42,7 +42,7 @@ describe('duplicate-img-label', function() {
 		var node = fixture.querySelector('#target');
 		axe.testUtils.flatTreeSetup(fixture);
 		assert.isFalse(
-			checks['duplicate-img-label'].evaluate(
+			axe.testUtils.getCheckEvaluate('duplicate-img-label')(
 				node,
 				undefined,
 				axe.utils.getNodeFromTree(node)
@@ -56,7 +56,7 @@ describe('duplicate-img-label', function() {
 		var node = fixture.querySelector('#target');
 		axe.testUtils.flatTreeSetup(fixture);
 		assert.isTrue(
-			checks['duplicate-img-label'].evaluate(
+			axe.testUtils.getCheckEvaluate('duplicate-img-label')(
 				node,
 				undefined,
 				axe.utils.getNodeFromTree(node)
@@ -70,7 +70,7 @@ describe('duplicate-img-label', function() {
 		var node = fixture.querySelector('#target');
 		axe.testUtils.flatTreeSetup(fixture);
 		assert.isTrue(
-			checks['duplicate-img-label'].evaluate(
+			axe.testUtils.getCheckEvaluate('duplicate-img-label')(
 				node,
 				undefined,
 				axe.utils.getNodeFromTree(node)
@@ -83,7 +83,7 @@ describe('duplicate-img-label', function() {
 		var node = fixture.querySelector('#target');
 		axe.testUtils.flatTreeSetup(fixture);
 		assert.isFalse(
-			checks['duplicate-img-label'].evaluate(
+			axe.testUtils.getCheckEvaluate('duplicate-img-label')(
 				node,
 				undefined,
 				axe.utils.getNodeFromTree(node)
@@ -97,7 +97,7 @@ describe('duplicate-img-label', function() {
 		var node = fixture.querySelector('#target');
 		axe.testUtils.flatTreeSetup(fixture);
 		assert.isFalse(
-			checks['duplicate-img-label'].evaluate(
+			axe.testUtils.getCheckEvaluate('duplicate-img-label')(
 				node,
 				undefined,
 				axe.utils.getNodeFromTree(node)
@@ -111,7 +111,7 @@ describe('duplicate-img-label', function() {
 		var node = fixture.querySelector('#target');
 		axe.testUtils.flatTreeSetup(fixture);
 		assert.isFalse(
-			checks['duplicate-img-label'].evaluate(
+			axe.testUtils.getCheckEvaluate('duplicate-img-label')(
 				node,
 				undefined,
 				axe.utils.getNodeFromTree(node)
@@ -131,7 +131,7 @@ describe('duplicate-img-label', function() {
 			axe.testUtils.flatTreeSetup(fixture);
 			var node = shadow.querySelector('#target');
 			assert.isTrue(
-				checks['duplicate-img-label'].evaluate(
+				axe.testUtils.getCheckEvaluate('duplicate-img-label')(
 					node,
 					undefined,
 					axe.utils.getNodeFromTree(node)
@@ -153,7 +153,7 @@ describe('duplicate-img-label', function() {
 			axe.testUtils.flatTreeSetup(fixture);
 			var node = button.querySelector('#target');
 			assert.isTrue(
-				checks['duplicate-img-label'].evaluate(
+				axe.testUtils.getCheckEvaluate('duplicate-img-label')(
 					node,
 					undefined,
 					axe.utils.getNodeFromTree(node)
@@ -173,7 +173,9 @@ describe('duplicate-img-label', function() {
 			var checkArgs = checkSetup(button);
 
 			assert.isFalse(
-				checks['duplicate-img-label'].evaluate.apply(null, checkArgs)
+				axe.testUtils
+					.getCheckEvaluate('duplicate-img-label')
+					.apply(null, checkArgs)
 			);
 		}
 	);
diff --git a/test/checks/label/explicit.js b/test/checks/label/explicit.js
index 5ce06ac86f..bcef42a19b 100644
--- a/test/checks/label/explicit.js
+++ b/test/checks/label/explicit.js
@@ -12,7 +12,7 @@ describe('explicit-label', function() {
 	it('should return false if an empty label is present', function() {
 		fixtureSetup('<label for="target"></label><input type="text" id="target">');
 		var node = fixture.querySelector('#target');
-		assert.isFalse(checks['explicit-label'].evaluate(node));
+		assert.isFalse(axe.testUtils.getCheckEvaluate('explicit-label')(node));
 	});
 
 	it('should return true if a non-empty label is present', function() {
@@ -20,7 +20,7 @@ describe('explicit-label', function() {
 			'<label for="target">Text</label><input type="text" id="target">'
 		);
 		var node = fixture.querySelector('#target');
-		assert.isTrue(checks['explicit-label'].evaluate(node));
+		assert.isTrue(axe.testUtils.getCheckEvaluate('explicit-label')(node));
 	});
 
 	it('should return true if an invisible non-empty label is present, to defer to hidden-explicit-label', function() {
@@ -28,7 +28,7 @@ describe('explicit-label', function() {
 			'<label for="target" style="display: none;">Text</label><input type="text" id="target">'
 		);
 		var node = fixture.querySelector('#target');
-		assert.isTrue(checks['explicit-label'].evaluate(node));
+		assert.isTrue(axe.testUtils.getCheckEvaluate('explicit-label')(node));
 	});
 
 	it('should return false if a label is not present', function() {
@@ -36,7 +36,7 @@ describe('explicit-label', function() {
 		node.type = 'text';
 		fixtureSetup(node);
 
-		assert.isFalse(checks['explicit-label'].evaluate(node));
+		assert.isFalse(axe.testUtils.getCheckEvaluate('explicit-label')(node));
 	});
 
 	(shadowSupport.v1 ? it : xit)(
@@ -49,7 +49,7 @@ describe('explicit-label', function() {
 			fixtureSetup(root);
 
 			var node = shadow.querySelector('#target');
-			assert.isTrue(checks['explicit-label'].evaluate(node));
+			assert.isTrue(axe.testUtils.getCheckEvaluate('explicit-label')(node));
 		}
 	);
 
@@ -64,7 +64,7 @@ describe('explicit-label', function() {
 			fixtureSetup(root);
 
 			var node = shadow.querySelector('#target');
-			assert.isTrue(checks['explicit-label'].evaluate(node));
+			assert.isTrue(axe.testUtils.getCheckEvaluate('explicit-label')(node));
 		}
 	);
 
@@ -78,7 +78,7 @@ describe('explicit-label', function() {
 			fixtureSetup(root);
 
 			var node = shadow.querySelector('#target');
-			assert.isFalse(checks['explicit-label'].evaluate(node));
+			assert.isFalse(axe.testUtils.getCheckEvaluate('explicit-label')(node));
 		}
 	);
 
@@ -93,7 +93,7 @@ describe('explicit-label', function() {
 			fixtureSetup(root);
 
 			var node = root.querySelector('#target');
-			assert.isFalse(checks['explicit-label'].evaluate(node));
+			assert.isFalse(axe.testUtils.getCheckEvaluate('explicit-label')(node));
 		}
 	);
 });
diff --git a/test/checks/label/help-same-as-label.js b/test/checks/label/help-same-as-label.js
index 145383dab6..117c03dde1 100644
--- a/test/checks/label/help-same-as-label.js
+++ b/test/checks/label/help-same-as-label.js
@@ -17,7 +17,7 @@ describe('help-same-as-label', function() {
 		fixture.appendChild(node);
 		axe.testUtils.flatTreeSetup(fixture);
 		assert.isTrue(
-			checks['help-same-as-label'].evaluate(
+			axe.testUtils.getCheckEvaluate('help-same-as-label')(
 				node,
 				undefined,
 				axe.utils.getNodeFromTree(node)
@@ -39,7 +39,7 @@ describe('help-same-as-label', function() {
 
 		axe.testUtils.flatTreeSetup(fixture);
 		assert.isTrue(
-			checks['help-same-as-label'].evaluate(
+			axe.testUtils.getCheckEvaluate('help-same-as-label')(
 				node,
 				undefined,
 				axe.utils.getNodeFromTree(node)
@@ -56,7 +56,7 @@ describe('help-same-as-label', function() {
 
 		axe.testUtils.flatTreeSetup(fixture);
 		assert.isFalse(
-			checks['help-same-as-label'].evaluate(
+			axe.testUtils.getCheckEvaluate('help-same-as-label')(
 				node,
 				undefined,
 				axe.utils.getNodeFromTree(node)
@@ -77,7 +77,7 @@ describe('help-same-as-label', function() {
 
 		axe.testUtils.flatTreeSetup(fixture);
 		assert.isFalse(
-			checks['help-same-as-label'].evaluate(
+			axe.testUtils.getCheckEvaluate('help-same-as-label')(
 				node,
 				undefined,
 				axe.utils.getNodeFromTree(node)
diff --git a/test/checks/label/implicit.js b/test/checks/label/implicit.js
index e2100cd50e..5514600da6 100644
--- a/test/checks/label/implicit.js
+++ b/test/checks/label/implicit.js
@@ -13,7 +13,9 @@ describe('implicit-label', function() {
 		fixtureSetup('<label><input type="text" id="target"></label>');
 		var node = fixture.querySelector('#target');
 		var virtualNode = axe.utils.getNodeFromTree(node);
-		assert.isFalse(checks['implicit-label'].evaluate(node, {}, virtualNode));
+		assert.isFalse(
+			axe.testUtils.getCheckEvaluate('implicit-label')(node, {}, virtualNode)
+		);
 	});
 
 	it('should return false if an invisible non-empty label is present', function() {
@@ -22,14 +24,18 @@ describe('implicit-label', function() {
 		);
 		var node = fixture.querySelector('#target');
 		var virtualNode = axe.utils.getNodeFromTree(node);
-		assert.isFalse(checks['implicit-label'].evaluate(node, {}, virtualNode));
+		assert.isFalse(
+			axe.testUtils.getCheckEvaluate('implicit-label')(node, {}, virtualNode)
+		);
 	});
 
 	it('should return true if a non-empty label is present', function() {
 		fixtureSetup('<label>Text <input type="text" id="target"></label>');
 		var node = fixture.querySelector('#target');
 		var virtualNode = axe.utils.getNodeFromTree(node);
-		assert.isTrue(checks['implicit-label'].evaluate(node, {}, virtualNode));
+		assert.isTrue(
+			axe.testUtils.getCheckEvaluate('implicit-label')(node, {}, virtualNode)
+		);
 	});
 
 	it('should return false if a label is not present', function() {
@@ -38,6 +44,8 @@ describe('implicit-label', function() {
 		fixtureSetup(node);
 
 		var virtualNode = axe.utils.getNodeFromTree(node);
-		assert.isFalse(checks['implicit-label'].evaluate(node, {}, virtualNode));
+		assert.isFalse(
+			axe.testUtils.getCheckEvaluate('implicit-label')(node, {}, virtualNode)
+		);
 	});
 });
diff --git a/test/checks/label/multiple-label.js b/test/checks/label/multiple-label.js
index 74903bcfe0..464b1a9fa5 100644
--- a/test/checks/label/multiple-label.js
+++ b/test/checks/label/multiple-label.js
@@ -17,7 +17,9 @@ describe('multiple-label', function() {
 		var l1 = fixture.querySelector('#l1');
 		var l2 = fixture.querySelector('#l2');
 		assert.isUndefined(
-			checks['multiple-label'].evaluate.call(checkContext, target)
+			axe.testUtils
+				.getCheckEvaluate('multiple-label')
+				.call(checkContext, target)
 		);
 		assert.deepEqual(checkContext._relatedNodes, [l1, l2]);
 	});
@@ -28,7 +30,9 @@ describe('multiple-label', function() {
 		var target = fixture.querySelector('#target');
 		var l1 = fixture.querySelector('#l1');
 		assert.isFalse(
-			checks['multiple-label'].evaluate.call(checkContext, target)
+			axe.testUtils
+				.getCheckEvaluate('multiple-label')
+				.call(checkContext, target)
 		);
 		assert.deepEqual(checkContext._relatedNodes, [l1]);
 	});
@@ -44,7 +48,9 @@ describe('multiple-label', function() {
 		var l2 = fixture.querySelector('#l2');
 		var l3 = fixture.querySelector('#l3');
 		assert.isUndefined(
-			checks['multiple-label'].evaluate.call(checkContext, target)
+			axe.testUtils
+				.getCheckEvaluate('multiple-label')
+				.call(checkContext, target)
 		);
 		assert.deepEqual(checkContext._relatedNodes, [l1, l2, l3]);
 	});
@@ -55,7 +61,9 @@ describe('multiple-label', function() {
 		var target = fixture.querySelector('#target');
 		var l1 = fixture.querySelector('#l1');
 		assert.isFalse(
-			checks['multiple-label'].evaluate.call(checkContext, target)
+			axe.testUtils
+				.getCheckEvaluate('multiple-label')
+				.call(checkContext, target)
 		);
 		assert.deepEqual(checkContext._relatedNodes, [l1]);
 	});
@@ -68,7 +76,9 @@ describe('multiple-label', function() {
 		var target = fixture.querySelector('#test-input2');
 		var l1 = fixture.querySelector('#l1');
 		assert.isFalse(
-			checks['multiple-label'].evaluate.call(checkContext, target)
+			axe.testUtils
+				.getCheckEvaluate('multiple-label')
+				.call(checkContext, target)
 		);
 		assert.deepEqual(checkContext._relatedNodes, [l1]);
 	});
@@ -83,7 +93,9 @@ describe('multiple-label', function() {
 		var l1 = fixture.querySelector('#l1');
 		var l3 = fixture.querySelector('#l3');
 		assert.isUndefined(
-			checks['multiple-label'].evaluate.call(checkContext, target)
+			axe.testUtils
+				.getCheckEvaluate('multiple-label')
+				.call(checkContext, target)
 		);
 		assert.deepEqual(checkContext._relatedNodes, [l1, l3]);
 	});
@@ -95,7 +107,9 @@ describe('multiple-label', function() {
 		var l1 = fixture.querySelector('#l1');
 		var l2 = fixture.querySelector('#l2');
 		assert.isUndefined(
-			checks['multiple-label'].evaluate.call(checkContext, target)
+			axe.testUtils
+				.getCheckEvaluate('multiple-label')
+				.call(checkContext, target)
 		);
 		assert.deepEqual(checkContext._relatedNodes, [l1, l2]);
 	});
@@ -105,7 +119,9 @@ describe('multiple-label', function() {
 			'<label for="target">Foo<input type="text" id="target"></label>';
 		var target = fixture.querySelector('#target');
 		assert.isFalse(
-			checks['multiple-label'].evaluate.call(checkContext, target)
+			axe.testUtils
+				.getCheckEvaluate('multiple-label')
+				.call(checkContext, target)
 		);
 	});
 
@@ -119,7 +135,9 @@ describe('multiple-label', function() {
 		fixture.innerHTML += '<label for="A">Sally</label>';
 		var target = fixture.querySelector('#A');
 		assert.isUndefined(
-			checks['multiple-label'].evaluate.call(checkContext, target)
+			axe.testUtils
+				.getCheckEvaluate('multiple-label')
+				.call(checkContext, target)
 		);
 	});
 
@@ -133,7 +151,9 @@ describe('multiple-label', function() {
 		fixture.innerHTML += '<label for="B" aria-hidden="true">Sally</label>';
 		var target = fixture.querySelector('#B');
 		assert.isUndefined(
-			checks['multiple-label'].evaluate.call(checkContext, target)
+			axe.testUtils
+				.getCheckEvaluate('multiple-label')
+				.call(checkContext, target)
 		);
 	});
 
@@ -143,7 +163,9 @@ describe('multiple-label', function() {
 		fixture.innerHTML += '<label for="D" id="E">Excuse</label>';
 		var target = fixture.querySelector('#D');
 		assert.isFalse(
-			checks['multiple-label'].evaluate.call(checkContext, target)
+			axe.testUtils
+				.getCheckEvaluate('multiple-label')
+				.call(checkContext, target)
 		);
 	});
 
@@ -154,7 +176,9 @@ describe('multiple-label', function() {
 		fixture.innerHTML += '<label for="F" id="H">Excuse</label>';
 		var target = fixture.querySelector('#F');
 		assert.isFalse(
-			checks['multiple-label'].evaluate.call(checkContext, target)
+			axe.testUtils
+				.getCheckEvaluate('multiple-label')
+				.call(checkContext, target)
 		);
 	});
 
@@ -164,7 +188,9 @@ describe('multiple-label', function() {
 		fixture.innerHTML += '<label for="I" >Excuse</label>';
 		var target = fixture.querySelector('#I');
 		assert.isFalse(
-			checks['multiple-label'].evaluate.call(checkContext, target)
+			axe.testUtils
+				.getCheckEvaluate('multiple-label')
+				.call(checkContext, target)
 		);
 	});
 
@@ -179,7 +205,9 @@ describe('multiple-label', function() {
 		fixture.innerHTML += '<label for="J" id="P">Sally</label>';
 		var target = fixture.querySelector('#J');
 		assert.isUndefined(
-			checks['multiple-label'].evaluate.call(checkContext, target)
+			axe.testUtils
+				.getCheckEvaluate('multiple-label')
+				.call(checkContext, target)
 		);
 	});
 
@@ -189,7 +217,9 @@ describe('multiple-label', function() {
 		fixture.innerHTML += '<label for="Q" >Excuse</label>';
 		var target = fixture.querySelector('#Q');
 		assert.isUndefined(
-			checks['multiple-label'].evaluate.call(checkContext, target)
+			axe.testUtils
+				.getCheckEvaluate('multiple-label')
+				.call(checkContext, target)
 		);
 	});
 
@@ -203,10 +233,9 @@ describe('multiple-label', function() {
 				'<input id="myinput" /><label for="myinput">normal</label>';
 			var shadowTarget = target.shadowRoot;
 			assert.isFalse(
-				checks['multiple-label'].evaluate.call(
-					checkContext,
-					shadowTarget.firstElementChild
-				)
+				axe.testUtils
+					.getCheckEvaluate('multiple-label')
+					.call(checkContext, shadowTarget.firstElementChild)
 			);
 		}
 	);
@@ -223,10 +252,9 @@ describe('multiple-label', function() {
 			shadowRoot.innerHTML = innerHTML;
 			var shadowTarget = target.shadowRoot;
 			assert.isFalse(
-				checks['multiple-label'].evaluate.call(
-					checkContext,
-					shadowTarget.firstElementChild
-				)
+				axe.testUtils
+					.getCheckEvaluate('multiple-label')
+					.call(checkContext, shadowTarget.firstElementChild)
 			);
 		}
 	);
@@ -243,10 +271,9 @@ describe('multiple-label', function() {
 			shadowRoot.innerHTML = innerHTML;
 			var shadowTarget = target.shadowRoot;
 			assert.isUndefined(
-				checks['multiple-label'].evaluate.call(
-					checkContext,
-					shadowTarget.firstElementChild
-				)
+				axe.testUtils
+					.getCheckEvaluate('multiple-label')
+					.call(checkContext, shadowTarget.firstElementChild)
 			);
 		}
 	);
diff --git a/test/checks/label/title-only.js b/test/checks/label/title-only.js
index 0cd86e175d..f2cd766551 100644
--- a/test/checks/label/title-only.js
+++ b/test/checks/label/title-only.js
@@ -18,7 +18,7 @@ describe('title-only', function() {
 		axe.testUtils.flatTreeSetup(fixture);
 
 		assert.isTrue(
-			checks['title-only'].evaluate(
+			axe.testUtils.getCheckEvaluate('title-only')(
 				node,
 				undefined,
 				axe.utils.getNodeFromTree(node)
@@ -26,7 +26,7 @@ describe('title-only', function() {
 		);
 		node.setAttribute('aria-label', 'woop');
 		assert.isFalse(
-			checks['title-only'].evaluate(
+			axe.testUtils.getCheckEvaluate('title-only')(
 				node,
 				undefined,
 				axe.utils.getNodeFromTree(node)
@@ -48,7 +48,7 @@ describe('title-only', function() {
 		axe.testUtils.flatTreeSetup(fixture);
 
 		assert.isTrue(
-			checks['title-only'].evaluate(
+			axe.testUtils.getCheckEvaluate('title-only')(
 				node,
 				undefined,
 				axe.utils.getNodeFromTree(node)
@@ -56,7 +56,7 @@ describe('title-only', function() {
 		);
 		node.setAttribute('aria-label', 'woop');
 		assert.isFalse(
-			checks['title-only'].evaluate(
+			axe.testUtils.getCheckEvaluate('title-only')(
 				node,
 				undefined,
 				axe.utils.getNodeFromTree(node)
diff --git a/test/checks/landmarks/landmark-is-unique.js b/test/checks/landmarks/landmark-is-unique.js
index 89b896a947..049615deee 100644
--- a/test/checks/landmarks/landmark-is-unique.js
+++ b/test/checks/landmarks/landmark-is-unique.js
@@ -25,12 +25,9 @@ describe('landmark-is-unique', function() {
 		axe._tree = axe.utils.getFlattenedTree(fixture);
 		var virtualNode = axe.utils.getNodeFromTree(axe._tree[0], node);
 		assert.isTrue(
-			checks['landmark-is-unique'].evaluate.call(
-				checkContext,
-				node,
-				{},
-				virtualNode
-			)
+			axe.testUtils
+				.getCheckEvaluate('landmark-is-unique')
+				.call(checkContext, node, {}, virtualNode)
 		);
 		assert.deepEqual(checkContext._data, expectedData);
 		assert.deepEqual(checkContext._relatedNodes, [node]);
@@ -46,12 +43,9 @@ describe('landmark-is-unique', function() {
 		axe._tree = axe.utils.getFlattenedTree(fixture);
 		var virtualNode = axe.utils.getNodeFromTree(axe._tree[0], node);
 		assert.isTrue(
-			checks['landmark-is-unique'].evaluate.call(
-				checkContext,
-				node,
-				{},
-				virtualNode
-			)
+			axe.testUtils
+				.getCheckEvaluate('landmark-is-unique')
+				.call(checkContext, node, {}, virtualNode)
 		);
 		assert.deepEqual(checkContext._data, expectedData);
 		assert.deepEqual(checkContext._relatedNodes, [node]);
diff --git a/test/checks/language/has-lang.js b/test/checks/language/has-lang.js
index d37ca4a4f6..ef07a2a7d2 100644
--- a/test/checks/language/has-lang.js
+++ b/test/checks/language/has-lang.js
@@ -4,7 +4,7 @@ describe('has-lang', function() {
 	var fixture = document.getElementById('fixture');
 	var checkContext = axe.testUtils.MockCheckContext();
 	var checkSetup = axe.testUtils.checkSetup;
-	var hasLangEvaluate = checks['has-lang'].evaluate;
+	var hasLangEvaluate = axe.testUtils.getCheckEvaluate('has-lang');
 
 	afterEach(function() {
 		fixture.innerHTML = '';
diff --git a/test/checks/language/valid-lang.js b/test/checks/language/valid-lang.js
index e69289cd17..705376920f 100644
--- a/test/checks/language/valid-lang.js
+++ b/test/checks/language/valid-lang.js
@@ -17,11 +17,9 @@ describe('valid-lang', function() {
 			fixture.appendChild(node);
 
 			assert.isFalse(
-				checks['valid-lang'].evaluate.call(checkContext, node, [
-					'blah',
-					'blah',
-					'woohoo'
-				])
+				axe.testUtils
+					.getCheckEvaluate('valid-lang')
+					.call(checkContext, node, ['blah', 'blah', 'woohoo'])
 			);
 		});
 
@@ -31,11 +29,9 @@ describe('valid-lang', function() {
 			fixture.appendChild(node);
 
 			assert.isFalse(
-				checks['valid-lang'].evaluate.call(checkContext, node, [
-					'blah',
-					'blah',
-					'wOohoo'
-				])
+				axe.testUtils
+					.getCheckEvaluate('valid-lang')
+					.call(checkContext, node, ['blah', 'blah', 'wOohoo'])
 			);
 		});
 
@@ -44,7 +40,11 @@ describe('valid-lang', function() {
 			node.setAttribute('lang', 'en-FOO');
 			fixture.appendChild(node);
 
-			assert.isTrue(checks['valid-lang'].evaluate.call(checkContext, node, []));
+			assert.isTrue(
+				axe.testUtils
+					.getCheckEvaluate('valid-lang')
+					.call(checkContext, node, [])
+			);
 			assert.deepEqual(checkContext._data, ['lang="en-FOO"']);
 		});
 
@@ -53,7 +53,9 @@ describe('valid-lang', function() {
 			node.setAttribute('lang', 'en-US');
 			fixture.appendChild(node);
 
-			assert.isFalse(checks['valid-lang'].evaluate.call(checkContext, node));
+			assert.isFalse(
+				axe.testUtils.getCheckEvaluate('valid-lang').call(checkContext, node)
+			);
 		});
 
 		it('should return true if the language is badly formatted', function() {
@@ -62,7 +64,9 @@ describe('valid-lang', function() {
 			fixture.appendChild(node);
 
 			assert.isTrue(
-				checks['valid-lang'].evaluate.call(checkContext, node, ['en'])
+				axe.testUtils
+					.getCheckEvaluate('valid-lang')
+					.call(checkContext, node, ['en'])
 			);
 			assert.deepEqual(checkContext._data, ['lang="en_US"']);
 		});
@@ -73,7 +77,9 @@ describe('valid-lang', function() {
 			fixture.appendChild(node);
 
 			assert.isFalse(
-				checks['valid-lang'].evaluate.call(checkContext, node, ['en'])
+				axe.testUtils
+					.getCheckEvaluate('valid-lang')
+					.call(checkContext, node, ['en'])
 			);
 		});
 	});
@@ -85,11 +91,9 @@ describe('valid-lang', function() {
 			fixture.appendChild(node);
 
 			assert.isFalse(
-				checks['valid-lang'].evaluate.call(checkContext, node, [
-					'blah',
-					'blah',
-					'woohoo'
-				])
+				axe.testUtils
+					.getCheckEvaluate('valid-lang')
+					.call(checkContext, node, ['blah', 'blah', 'woohoo'])
 			);
 		});
 
@@ -99,11 +103,9 @@ describe('valid-lang', function() {
 			fixture.appendChild(node);
 
 			assert.isFalse(
-				checks['valid-lang'].evaluate.call(checkContext, node, [
-					'blah',
-					'blah',
-					'wOohoo'
-				])
+				axe.testUtils
+					.getCheckEvaluate('valid-lang')
+					.call(checkContext, node, ['blah', 'blah', 'wOohoo'])
 			);
 		});
 
@@ -112,7 +114,11 @@ describe('valid-lang', function() {
 			node.setAttribute('xml:lang', 'en-FOO');
 			fixture.appendChild(node);
 
-			assert.isTrue(checks['valid-lang'].evaluate.call(checkContext, node, []));
+			assert.isTrue(
+				axe.testUtils
+					.getCheckEvaluate('valid-lang')
+					.call(checkContext, node, [])
+			);
 			assert.deepEqual(checkContext._data, ['xml:lang="en-FOO"']);
 		});
 
@@ -121,7 +127,9 @@ describe('valid-lang', function() {
 			node.setAttribute('xml:lang', 'en-US');
 			fixture.appendChild(node);
 
-			assert.isFalse(checks['valid-lang'].evaluate.call(checkContext, node));
+			assert.isFalse(
+				axe.testUtils.getCheckEvaluate('valid-lang').call(checkContext, node)
+			);
 		});
 
 		it('should return true if the language is badly formatted', function() {
@@ -130,7 +138,9 @@ describe('valid-lang', function() {
 			fixture.appendChild(node);
 
 			assert.isTrue(
-				checks['valid-lang'].evaluate.call(checkContext, node, ['en'])
+				axe.testUtils
+					.getCheckEvaluate('valid-lang')
+					.call(checkContext, node, ['en'])
 			);
 			assert.deepEqual(checkContext._data, ['xml:lang="en_US"']);
 		});
@@ -141,7 +151,9 @@ describe('valid-lang', function() {
 			fixture.appendChild(node);
 
 			assert.isFalse(
-				checks['valid-lang'].evaluate.call(checkContext, node, ['en'])
+				axe.testUtils
+					.getCheckEvaluate('valid-lang')
+					.call(checkContext, node, ['en'])
 			);
 		});
 	});
diff --git a/test/checks/language/xml-lang-mismatch.js b/test/checks/language/xml-lang-mismatch.js
index 3e6b396f5d..4463c38250 100644
--- a/test/checks/language/xml-lang-mismatch.js
+++ b/test/checks/language/xml-lang-mismatch.js
@@ -23,7 +23,9 @@ describe('xml-lang-mismatch', function() {
 		node.setAttribute('lang', 'en');
 		fixture.appendChild(node);
 		assert.isFalse(
-			checks['xml-lang-mismatch'].evaluate.call(checkContext, node)
+			axe.testUtils
+				.getCheckEvaluate('xml-lang-mismatch')
+				.call(checkContext, node)
 		);
 	});
 
@@ -31,7 +33,9 @@ describe('xml-lang-mismatch', function() {
 		node.setAttribute('xml:lang', 'fr-FR');
 		fixture.appendChild(node);
 		assert.isFalse(
-			checks['xml-lang-mismatch'].evaluate.call(checkContext, node)
+			axe.testUtils
+				.getCheckEvaluate('xml-lang-mismatch')
+				.call(checkContext, node)
 		);
 	});
 
@@ -39,7 +43,9 @@ describe('xml-lang-mismatch', function() {
 		node.setAttribute('lang', undefined);
 		fixture.appendChild(node);
 		assert.isFalse(
-			checks['xml-lang-mismatch'].evaluate.call(checkContext, node)
+			axe.testUtils
+				.getCheckEvaluate('xml-lang-mismatch')
+				.call(checkContext, node)
 		);
 	});
 
@@ -48,7 +54,9 @@ describe('xml-lang-mismatch', function() {
 		node.setAttribute('xml:lang', 'en-GB');
 		fixture.appendChild(node);
 		assert.isTrue(
-			checks['xml-lang-mismatch'].evaluate.call(checkContext, node)
+			axe.testUtils
+				.getCheckEvaluate('xml-lang-mismatch')
+				.call(checkContext, node)
 		);
 	});
 
@@ -57,7 +65,9 @@ describe('xml-lang-mismatch', function() {
 		node.setAttribute('xml:lang', 'en-US');
 		fixture.appendChild(node);
 		assert.isTrue(
-			checks['xml-lang-mismatch'].evaluate.call(checkContext, node)
+			axe.testUtils
+				.getCheckEvaluate('xml-lang-mismatch')
+				.call(checkContext, node)
 		);
 	});
 
@@ -65,7 +75,9 @@ describe('xml-lang-mismatch', function() {
 		node.setAttribute('lang', 'en');
 		node.setAttribute('xml:lang', 'fr-FR');
 		fixture.appendChild(node);
-		var actual = checks['xml-lang-mismatch'].evaluate.call(checkContext, node);
+		var actual = axe.testUtils
+			.getCheckEvaluate('xml-lang-mismatch')
+			.call(checkContext, node);
 		assert.isFalse(actual);
 	});
 });
diff --git a/test/checks/lists/only-dlitems.js b/test/checks/lists/only-dlitems.js
index af5aaba532..b45c837f99 100644
--- a/test/checks/lists/only-dlitems.js
+++ b/test/checks/lists/only-dlitems.js
@@ -17,7 +17,9 @@ describe('only-dlitems', function() {
 		var checkArgs = checkSetup('<dl id="target"></dl>');
 
 		assert.isFalse(
-			checks['only-dlitems'].evaluate.apply(checkContext, checkArgs)
+			axe.testUtils
+				.getCheckEvaluate('only-dlitems')
+				.apply(checkContext, checkArgs)
 		);
 	});
 
@@ -25,7 +27,9 @@ describe('only-dlitems', function() {
 		var checkArgs = checkSetup('<dl id="target"><p>Not a list</p></dl>');
 
 		assert.isTrue(
-			checks['only-dlitems'].evaluate.apply(checkContext, checkArgs)
+			axe.testUtils
+				.getCheckEvaluate('only-dlitems')
+				.apply(checkContext, checkArgs)
 		);
 		assert.deepEqual(checkContext._relatedNodes, [fixture.querySelector('p')]);
 	});
@@ -36,7 +40,9 @@ describe('only-dlitems', function() {
 		);
 
 		assert.isTrue(
-			checks['only-dlitems'].evaluate.apply(checkContext, checkArgs)
+			axe.testUtils
+				.getCheckEvaluate('only-dlitems')
+				.apply(checkContext, checkArgs)
 		);
 	});
 
@@ -46,7 +52,9 @@ describe('only-dlitems', function() {
 		);
 
 		assert.isTrue(
-			checks['only-dlitems'].evaluate.apply(checkContext, checkArgs)
+			axe.testUtils
+				.getCheckEvaluate('only-dlitems')
+				.apply(checkContext, checkArgs)
 		);
 	});
 
@@ -54,7 +62,9 @@ describe('only-dlitems', function() {
 		var checkArgs = checkSetup('<dl id="target"><dd>A list</dd></dl>');
 
 		assert.isFalse(
-			checks['only-dlitems'].evaluate.apply(checkContext, checkArgs)
+			axe.testUtils
+				.getCheckEvaluate('only-dlitems')
+				.apply(checkContext, checkArgs)
 		);
 	});
 
@@ -63,7 +73,9 @@ describe('only-dlitems', function() {
 			'<dl id="target"><link rel="stylesheet" href="theme.css"><dt role="menuitem">A list</dt></dl>'
 		);
 		assert.isTrue(
-			checks['only-dlitems'].evaluate.apply(checkContext, checkArgs)
+			axe.testUtils
+				.getCheckEvaluate('only-dlitems')
+				.apply(checkContext, checkArgs)
 		);
 	});
 
@@ -71,7 +83,9 @@ describe('only-dlitems', function() {
 		var checkArgs = checkSetup('<dl id="target"><dt>A list</dt></dl>');
 
 		assert.isFalse(
-			checks['only-dlitems'].evaluate.apply(checkContext, checkArgs)
+			axe.testUtils
+				.getCheckEvaluate('only-dlitems')
+				.apply(checkContext, checkArgs)
 		);
 	});
 
@@ -81,7 +95,9 @@ describe('only-dlitems', function() {
 		);
 
 		assert.isFalse(
-			checks['only-dlitems'].evaluate.apply(checkContext, checkArgs)
+			axe.testUtils
+				.getCheckEvaluate('only-dlitems')
+				.apply(checkContext, checkArgs)
 		);
 	});
 
@@ -91,7 +107,9 @@ describe('only-dlitems', function() {
 		);
 
 		assert.isFalse(
-			checks['only-dlitems'].evaluate.apply(checkContext, checkArgs)
+			axe.testUtils
+				.getCheckEvaluate('only-dlitems')
+				.apply(checkContext, checkArgs)
 		);
 	});
 
@@ -101,7 +119,9 @@ describe('only-dlitems', function() {
 		);
 
 		assert.isFalse(
-			checks['only-dlitems'].evaluate.apply(checkContext, checkArgs)
+			axe.testUtils
+				.getCheckEvaluate('only-dlitems')
+				.apply(checkContext, checkArgs)
 		);
 	});
 
@@ -111,7 +131,9 @@ describe('only-dlitems', function() {
 		);
 
 		assert.isTrue(
-			checks['only-dlitems'].evaluate.apply(checkContext, checkArgs)
+			axe.testUtils
+				.getCheckEvaluate('only-dlitems')
+				.apply(checkContext, checkArgs)
 		);
 		assert.deepEqual(checkContext._relatedNodes, [fixture.querySelector('p')]);
 	});
@@ -122,7 +144,9 @@ describe('only-dlitems', function() {
 		);
 
 		assert.isTrue(
-			checks['only-dlitems'].evaluate.apply(checkContext, checkArgs)
+			axe.testUtils
+				.getCheckEvaluate('only-dlitems')
+				.apply(checkContext, checkArgs)
 		);
 		assert.deepEqual(checkContext._relatedNodes, []);
 	});
@@ -136,7 +160,9 @@ describe('only-dlitems', function() {
 			);
 
 			assert.isFalse(
-				checks['only-dlitems'].evaluate.apply(checkContext, checkArgs)
+				axe.testUtils
+					.getCheckEvaluate('only-dlitems')
+					.apply(checkContext, checkArgs)
 			);
 		}
 	);
@@ -147,7 +173,9 @@ describe('only-dlitems', function() {
 		);
 
 		assert.isFalse(
-			checks['only-dlitems'].evaluate.apply(checkContext, checkArgs)
+			axe.testUtils
+				.getCheckEvaluate('only-dlitems')
+				.apply(checkContext, checkArgs)
 		);
 	});
 
@@ -157,7 +185,9 @@ describe('only-dlitems', function() {
 		);
 
 		assert.isFalse(
-			checks['only-dlitems'].evaluate.apply(checkContext, checkArgs)
+			axe.testUtils
+				.getCheckEvaluate('only-dlitems')
+				.apply(checkContext, checkArgs)
 		);
 	});
 
@@ -167,7 +197,9 @@ describe('only-dlitems', function() {
 		);
 
 		assert.isFalse(
-			checks['only-dlitems'].evaluate.apply(checkContext, checkArgs)
+			axe.testUtils
+				.getCheckEvaluate('only-dlitems')
+				.apply(checkContext, checkArgs)
 		);
 	});
 
@@ -177,7 +209,9 @@ describe('only-dlitems', function() {
 		);
 
 		assert.isFalse(
-			checks['only-dlitems'].evaluate.apply(checkContext, checkArgs)
+			axe.testUtils
+				.getCheckEvaluate('only-dlitems')
+				.apply(checkContext, checkArgs)
 		);
 	});
 
@@ -186,7 +220,9 @@ describe('only-dlitems', function() {
 			'<dl id="target"><div><dt>An item</dt><dd>A list</dd></div></dl>'
 		);
 		assert.isFalse(
-			checks['only-dlitems'].evaluate.apply(checkContext, checkArgs)
+			axe.testUtils
+				.getCheckEvaluate('only-dlitems')
+				.apply(checkContext, checkArgs)
 		);
 	});
 
@@ -195,7 +231,9 @@ describe('only-dlitems', function() {
 			'<dl id="target"><div role="listitem"><dt>An item</dt><dd>A list</dd></div></dl>'
 		);
 		assert.isTrue(
-			checks['only-dlitems'].evaluate.apply(checkContext, checkArgs)
+			axe.testUtils
+				.getCheckEvaluate('only-dlitems')
+				.apply(checkContext, checkArgs)
 		);
 	});
 
@@ -204,14 +242,18 @@ describe('only-dlitems', function() {
 			'<dl id="target"><div><dt>An item</dt><dd>A list</dd><p>Not a list</p></div></dl>'
 		);
 		assert.isTrue(
-			checks['only-dlitems'].evaluate.apply(checkContext, checkArgs)
+			axe.testUtils
+				.getCheckEvaluate('only-dlitems')
+				.apply(checkContext, checkArgs)
 		);
 	});
 
 	it('should return false if there is an empty div', function() {
 		var checkArgs = checkSetup('<dl id="target"><div></div></dl>');
 		assert.isFalse(
-			checks['only-dlitems'].evaluate.apply(checkContext, checkArgs)
+			axe.testUtils
+				.getCheckEvaluate('only-dlitems')
+				.apply(checkContext, checkArgs)
 		);
 	});
 
@@ -220,14 +262,18 @@ describe('only-dlitems', function() {
 			'<dl id="target"> <dt>An item</dt> <dd>A list</dd> <h1 style="display:none">heading</h1> </dl>'
 		);
 		assert.isFalse(
-			checks['only-dlitems'].evaluate.apply(checkContext, checkArgs)
+			axe.testUtils
+				.getCheckEvaluate('only-dlitems')
+				.apply(checkContext, checkArgs)
 		);
 	});
 
 	it('should return true if there is a div with text', function() {
 		var checkArgs = checkSetup('<dl id="target"><div>text</div></dl>');
 		assert.isTrue(
-			checks['only-dlitems'].evaluate.apply(checkContext, checkArgs)
+			axe.testUtils
+				.getCheckEvaluate('only-dlitems')
+				.apply(checkContext, checkArgs)
 		);
 	});
 
@@ -236,14 +282,18 @@ describe('only-dlitems', function() {
 			'<dl id="target"> <dt>An item</dt> <dd>A list</dd> <h1 style="visibility:hidden">heading</h1> </dl>'
 		);
 		assert.isFalse(
-			checks['only-dlitems'].evaluate.apply(checkContext, checkArgs)
+			axe.testUtils
+				.getCheckEvaluate('only-dlitems')
+				.apply(checkContext, checkArgs)
 		);
 	});
 
 	it('should return true if there is a div with non-dd / dt elements', function() {
 		var checkArgs = checkSetup('<dl id="target"><div> <p>text</p> </div></dl>');
 		assert.isTrue(
-			checks['only-dlitems'].evaluate.apply(checkContext, checkArgs)
+			axe.testUtils
+				.getCheckEvaluate('only-dlitems')
+				.apply(checkContext, checkArgs)
 		);
 	});
 
@@ -252,7 +302,9 @@ describe('only-dlitems', function() {
 			'<dl id="target"> <dt>An item</dt> <dd>A list</dd> <h1 aria-hidden="true">heading</h1> </dl>'
 		);
 		assert.isFalse(
-			checks['only-dlitems'].evaluate.apply(checkContext, checkArgs)
+			axe.testUtils
+				.getCheckEvaluate('only-dlitems')
+				.apply(checkContext, checkArgs)
 		);
 	});
 
@@ -261,7 +313,9 @@ describe('only-dlitems', function() {
 			'<dl id="target"> <dt>An item</dt> <dd>A list</dd> <h1 aria-hidden="false">heading</h1> </dl>'
 		);
 		assert.isTrue(
-			checks['only-dlitems'].evaluate.apply(checkContext, checkArgs)
+			axe.testUtils
+				.getCheckEvaluate('only-dlitems')
+				.apply(checkContext, checkArgs)
 		);
 	});
 
@@ -275,7 +329,9 @@ describe('only-dlitems', function() {
 
 			var checkArgs = checkSetup(node, 'dl');
 			assert.isFalse(
-				checks['only-dlitems'].evaluate.apply(checkContext, checkArgs)
+				axe.testUtils
+					.getCheckEvaluate('only-dlitems')
+					.apply(checkContext, checkArgs)
 			);
 		}
 	);
@@ -290,7 +346,9 @@ describe('only-dlitems', function() {
 
 			var checkArgs = checkSetup(node, 'dl');
 			assert.isTrue(
-				checks['only-dlitems'].evaluate.apply(checkContext, checkArgs)
+				axe.testUtils
+					.getCheckEvaluate('only-dlitems')
+					.apply(checkContext, checkArgs)
 			);
 		}
 	);
diff --git a/test/checks/lists/only-listitems.js b/test/checks/lists/only-listitems.js
index 6042122c3e..e20c829931 100644
--- a/test/checks/lists/only-listitems.js
+++ b/test/checks/lists/only-listitems.js
@@ -17,7 +17,9 @@ describe('only-listitems', function() {
 		var checkArgs = checkSetup('<ol id="target"></ol>');
 
 		assert.isFalse(
-			checks['only-listitems'].evaluate.apply(checkContext, checkArgs)
+			axe.testUtils
+				.getCheckEvaluate('only-listitems')
+				.apply(checkContext, checkArgs)
 		);
 	});
 
@@ -25,7 +27,9 @@ describe('only-listitems', function() {
 		var checkArgs = checkSetup('<ol id="target">   </ol>');
 
 		assert.isFalse(
-			checks['only-listitems'].evaluate.apply(checkContext, checkArgs)
+			axe.testUtils
+				.getCheckEvaluate('only-listitems')
+				.apply(checkContext, checkArgs)
 		);
 	});
 
@@ -33,7 +37,9 @@ describe('only-listitems', function() {
 		var checkArgs = checkSetup('<ol id="target"><li>Item</li>    </ol>');
 
 		assert.isFalse(
-			checks['only-listitems'].evaluate.apply(checkContext, checkArgs)
+			axe.testUtils
+				.getCheckEvaluate('only-listitems')
+				.apply(checkContext, checkArgs)
 		);
 	});
 
@@ -43,7 +49,9 @@ describe('only-listitems', function() {
 		);
 
 		assert.isFalse(
-			checks['only-listitems'].evaluate.apply(checkContext, checkArgs)
+			axe.testUtils
+				.getCheckEvaluate('only-listitems')
+				.apply(checkContext, checkArgs)
 		);
 	});
 
@@ -53,7 +61,9 @@ describe('only-listitems', function() {
 		);
 
 		assert.isFalse(
-			checks['only-listitems'].evaluate.apply(checkContext, checkArgs)
+			axe.testUtils
+				.getCheckEvaluate('only-listitems')
+				.apply(checkContext, checkArgs)
 		);
 	});
 
@@ -63,7 +73,9 @@ describe('only-listitems', function() {
 		);
 
 		assert.isFalse(
-			checks['only-listitems'].evaluate.apply(checkContext, checkArgs)
+			axe.testUtils
+				.getCheckEvaluate('only-listitems')
+				.apply(checkContext, checkArgs)
 		);
 	});
 
@@ -71,7 +83,9 @@ describe('only-listitems', function() {
 		var checkArgs = checkSetup('<ol id="target"><li>Item</li>Not an item</ol>');
 
 		assert.isTrue(
-			checks['only-listitems'].evaluate.apply(checkContext, checkArgs)
+			axe.testUtils
+				.getCheckEvaluate('only-listitems')
+				.apply(checkContext, checkArgs)
 		);
 	});
 
@@ -79,7 +93,9 @@ describe('only-listitems', function() {
 		var checkArgs = checkSetup('<ol id="target"><p>Not a list</p></ol>');
 
 		assert.isTrue(
-			checks['only-listitems'].evaluate.apply(checkContext, checkArgs)
+			axe.testUtils
+				.getCheckEvaluate('only-listitems')
+				.apply(checkContext, checkArgs)
 		);
 		assert.deepEqual(checkContext._relatedNodes, [fixture.querySelector('p')]);
 	});
@@ -88,7 +104,9 @@ describe('only-listitems', function() {
 		var checkArgs = checkSetup('<ol id="target"><li>A <i>list</i></li></ol>');
 
 		assert.isFalse(
-			checks['only-listitems'].evaluate.apply(checkContext, checkArgs)
+			axe.testUtils
+				.getCheckEvaluate('only-listitems')
+				.apply(checkContext, checkArgs)
 		);
 	});
 
@@ -96,7 +114,9 @@ describe('only-listitems', function() {
 		var checkArgs = checkSetup('<ol id="target"><li>A list</li></ol>');
 
 		assert.isFalse(
-			checks['only-listitems'].evaluate.apply(checkContext, checkArgs)
+			axe.testUtils
+				.getCheckEvaluate('only-listitems')
+				.apply(checkContext, checkArgs)
 		);
 	});
 
@@ -106,7 +126,9 @@ describe('only-listitems', function() {
 		);
 
 		assert.isTrue(
-			checks['only-listitems'].evaluate.apply(checkContext, checkArgs)
+			axe.testUtils
+				.getCheckEvaluate('only-listitems')
+				.apply(checkContext, checkArgs)
 		);
 		assert.deepEqual(checkContext._relatedNodes, [fixture.querySelector('p')]);
 	});
@@ -117,7 +139,9 @@ describe('only-listitems', function() {
 		);
 
 		assert.isFalse(
-			checks['only-listitems'].evaluate.apply(checkContext, checkArgs)
+			axe.testUtils
+				.getCheckEvaluate('only-listitems')
+				.apply(checkContext, checkArgs)
 		);
 	});
 
@@ -126,7 +150,9 @@ describe('only-listitems', function() {
 			'<ol id="target"><li id="fail1" role="menuitem">Not a list item</li><li id="fail2" role="menuitem">Not a list item</li></ol>'
 		);
 		assert.isTrue(
-			checks['only-listitems'].evaluate.apply(checkContext, checkArgs)
+			axe.testUtils
+				.getCheckEvaluate('only-listitems')
+				.apply(checkContext, checkArgs)
 		);
 		assert.deepEqual(checkContext._data, {
 			messageKey: 'roleNotValid',
@@ -144,7 +170,9 @@ describe('only-listitems', function() {
 		);
 
 		assert.isTrue(
-			checks['only-listitems'].evaluate.apply(checkContext, checkArgs)
+			axe.testUtils
+				.getCheckEvaluate('only-listitems')
+				.apply(checkContext, checkArgs)
 		);
 	});
 
@@ -157,7 +185,9 @@ describe('only-listitems', function() {
 			);
 
 			assert.isFalse(
-				checks['only-listitems'].evaluate.apply(checkContext, checkArgs)
+				axe.testUtils
+					.getCheckEvaluate('only-listitems')
+					.apply(checkContext, checkArgs)
 			);
 		}
 	);
@@ -168,7 +198,9 @@ describe('only-listitems', function() {
 		);
 
 		assert.isFalse(
-			checks['only-listitems'].evaluate.apply(checkContext, checkArgs)
+			axe.testUtils
+				.getCheckEvaluate('only-listitems')
+				.apply(checkContext, checkArgs)
 		);
 	});
 
@@ -178,7 +210,9 @@ describe('only-listitems', function() {
 		);
 
 		assert.isFalse(
-			checks['only-listitems'].evaluate.apply(checkContext, checkArgs)
+			axe.testUtils
+				.getCheckEvaluate('only-listitems')
+				.apply(checkContext, checkArgs)
 		);
 	});
 
@@ -188,7 +222,9 @@ describe('only-listitems', function() {
 		);
 
 		assert.isFalse(
-			checks['only-listitems'].evaluate.apply(checkContext, checkArgs)
+			axe.testUtils
+				.getCheckEvaluate('only-listitems')
+				.apply(checkContext, checkArgs)
 		);
 	});
 
@@ -198,7 +234,9 @@ describe('only-listitems', function() {
 		);
 
 		assert.isFalse(
-			checks['only-listitems'].evaluate.apply(checkContext, checkArgs)
+			axe.testUtils
+				.getCheckEvaluate('only-listitems')
+				.apply(checkContext, checkArgs)
 		);
 	});
 
@@ -207,7 +245,9 @@ describe('only-listitems', function() {
 			'<ul id="target"> <li>An item</li> <h1 style="display:none">heading</h1> </ul>'
 		);
 		assert.isFalse(
-			checks['only-listitems'].evaluate.apply(checkContext, checkArgs)
+			axe.testUtils
+				.getCheckEvaluate('only-listitems')
+				.apply(checkContext, checkArgs)
 		);
 	});
 
@@ -216,7 +256,9 @@ describe('only-listitems', function() {
 			'<ul id="target"> <li>An item</li> <h1 style="visibility:hidden">heading</h1> </ul>'
 		);
 		assert.isFalse(
-			checks['only-listitems'].evaluate.apply(checkContext, checkArgs)
+			axe.testUtils
+				.getCheckEvaluate('only-listitems')
+				.apply(checkContext, checkArgs)
 		);
 	});
 
@@ -225,7 +267,9 @@ describe('only-listitems', function() {
 			'<ul id="target"> <li>An item</li> <h1 aria-hidden="true">heading</h1> </ul>'
 		);
 		assert.isFalse(
-			checks['only-listitems'].evaluate.apply(checkContext, checkArgs)
+			axe.testUtils
+				.getCheckEvaluate('only-listitems')
+				.apply(checkContext, checkArgs)
 		);
 	});
 
@@ -234,7 +278,9 @@ describe('only-listitems', function() {
 			'<ul id="target"> <li>An item</li> <h1 aria-hidden="false">heading</h1> </ul>'
 		);
 		assert.isTrue(
-			checks['only-listitems'].evaluate.apply(checkContext, checkArgs)
+			axe.testUtils
+				.getCheckEvaluate('only-listitems')
+				.apply(checkContext, checkArgs)
 		);
 	});
 
@@ -248,7 +294,9 @@ describe('only-listitems', function() {
 
 			var checkArgs = checkSetup(node, 'ul');
 			assert.isFalse(
-				checks['only-listitems'].evaluate.apply(checkContext, checkArgs)
+				axe.testUtils
+					.getCheckEvaluate('only-listitems')
+					.apply(checkContext, checkArgs)
 			);
 		}
 	);
@@ -263,7 +311,9 @@ describe('only-listitems', function() {
 
 			var checkArgs = checkSetup(node, 'ul');
 			assert.isTrue(
-				checks['only-listitems'].evaluate.apply(checkContext, checkArgs)
+				axe.testUtils
+					.getCheckEvaluate('only-listitems')
+					.apply(checkContext, checkArgs)
 			);
 		}
 	);
diff --git a/test/checks/lists/structured-dlitems.js b/test/checks/lists/structured-dlitems.js
index 546d2905bb..c7ae96b7ec 100644
--- a/test/checks/lists/structured-dlitems.js
+++ b/test/checks/lists/structured-dlitems.js
@@ -12,19 +12,29 @@ describe('structured-dlitems', function() {
 	it('should return false if the list has no contents', function() {
 		var checkArgs = checkSetup('<dl id="target"></dl>');
 		assert.isFalse(
-			checks['structured-dlitems'].evaluate.apply(null, checkArgs)
+			axe.testUtils
+				.getCheckEvaluate('structured-dlitems')
+				.apply(null, checkArgs)
 		);
 	});
 
 	it('should return true if the list has only a dd', function() {
 		var checkArgs = checkSetup('<dl id="target"><dd>A list</dd></dl>');
-		assert.isTrue(checks['structured-dlitems'].evaluate.apply(null, checkArgs));
+		assert.isTrue(
+			axe.testUtils
+				.getCheckEvaluate('structured-dlitems')
+				.apply(null, checkArgs)
+		);
 	});
 
 	it('should return true if the list has only a dt', function() {
 		var checkArgs = checkSetup('<dl id="target"><dt>A list</dt></dl>');
 
-		assert.isTrue(checks['structured-dlitems'].evaluate.apply(null, checkArgs));
+		assert.isTrue(
+			axe.testUtils
+				.getCheckEvaluate('structured-dlitems')
+				.apply(null, checkArgs)
+		);
 	});
 
 	it('should return true if the list has dt and dd in the incorrect order', function() {
@@ -32,7 +42,11 @@ describe('structured-dlitems', function() {
 			'<dl id="target"><dd>A list</dd><dt>An item</dt></dl>'
 		);
 
-		assert.isTrue(checks['structured-dlitems'].evaluate.apply(null, checkArgs));
+		assert.isTrue(
+			axe.testUtils
+				.getCheckEvaluate('structured-dlitems')
+				.apply(null, checkArgs)
+		);
 	});
 
 	it('should return true if the list has dt and dd in the correct order as non-child descendants', function() {
@@ -40,7 +54,11 @@ describe('structured-dlitems', function() {
 			'<dl id="target"><dd><dl><dt>An item</dt><dd>A list</dd></dl></dd></dl>'
 		);
 
-		assert.isTrue(checks['structured-dlitems'].evaluate.apply(null, checkArgs));
+		assert.isTrue(
+			axe.testUtils
+				.getCheckEvaluate('structured-dlitems')
+				.apply(null, checkArgs)
+		);
 	});
 
 	it('should return false if the list has dt and dd in the correct order', function() {
@@ -49,7 +67,9 @@ describe('structured-dlitems', function() {
 		);
 
 		assert.isFalse(
-			checks['structured-dlitems'].evaluate.apply(null, checkArgs)
+			axe.testUtils
+				.getCheckEvaluate('structured-dlitems')
+				.apply(null, checkArgs)
 		);
 	});
 
@@ -59,7 +79,9 @@ describe('structured-dlitems', function() {
 		);
 
 		assert.isFalse(
-			checks['structured-dlitems'].evaluate.apply(null, checkArgs)
+			axe.testUtils
+				.getCheckEvaluate('structured-dlitems')
+				.apply(null, checkArgs)
 		);
 	});
 
@@ -73,7 +95,9 @@ describe('structured-dlitems', function() {
 
 			var checkArgs = checkSetup(node, 'dl');
 			assert.isFalse(
-				checks['structured-dlitems'].evaluate.apply(null, checkArgs)
+				axe.testUtils
+					.getCheckEvaluate('structured-dlitems')
+					.apply(null, checkArgs)
 			);
 		}
 	);
@@ -88,7 +112,9 @@ describe('structured-dlitems', function() {
 
 			var checkArgs = checkSetup(node, 'dl');
 			assert.isTrue(
-				checks['structured-dlitems'].evaluate.apply(null, checkArgs)
+				axe.testUtils
+					.getCheckEvaluate('structured-dlitems')
+					.apply(null, checkArgs)
 			);
 		}
 	);
diff --git a/test/checks/media/frame-tested.js b/test/checks/media/frame-tested.js
index 46ddbfe435..cec7e85efa 100644
--- a/test/checks/media/frame-tested.js
+++ b/test/checks/media/frame-tested.js
@@ -2,7 +2,7 @@ describe('frame-tested', function() {
 	'use strict';
 
 	var checkContext, iframe;
-	var checkEvaluate = checks['frame-tested'].evaluate;
+	var checkEvaluate = axe.testUtils.getCheckEvaluate('frame-tested');
 	var fixture = document.querySelector('#fixture');
 
 	beforeEach(function() {
diff --git a/test/checks/mobile/meta-viewport-scale.js b/test/checks/mobile/meta-viewport-scale.js
index 4b2137716f..58911d08be 100644
--- a/test/checks/mobile/meta-viewport-scale.js
+++ b/test/checks/mobile/meta-viewport-scale.js
@@ -14,7 +14,9 @@ describe('meta-viewport', function() {
 				'<meta name="viewport" content="foo=bar, cats=dogs, user-scalable=no">';
 			var node = fixture.querySelector('meta');
 
-			assert.isFalse(checks['meta-viewport'].evaluate.call(checkContext, node));
+			assert.isFalse(
+				axe.testUtils.getCheckEvaluate('meta-viewport').call(checkContext, node)
+			);
 			assert.deepEqual(checkContext._data, 'user-scalable=no');
 		});
 
@@ -23,7 +25,9 @@ describe('meta-viewport', function() {
 				'<meta name="viewport" content="foo=bar, cats=dogs, user-scalable=no, more-stuff=ok">';
 			var node = fixture.querySelector('meta');
 
-			assert.isFalse(checks['meta-viewport'].evaluate.call(checkContext, node));
+			assert.isFalse(
+				axe.testUtils.getCheckEvaluate('meta-viewport').call(checkContext, node)
+			);
 		});
 
 		it('should return true on user-scalable=yes', function() {
@@ -31,19 +35,23 @@ describe('meta-viewport', function() {
 				'<meta name="viewport" content="foo=bar, cats=dogs, user-scalable=yes, more-stuff=ok">';
 			var node = fixture.querySelector('meta');
 
-			assert.isTrue(checks['meta-viewport'].evaluate(node));
+			assert.isTrue(axe.testUtils.getCheckEvaluate('meta-viewport')(node));
 		});
 
 		it('should return false on maximum-scale=yes (translates to 1)', function() {
 			fixture.innerHTML = '<meta name="viewport" content="maximum-scale=yes">';
 			var node = fixture.querySelector('meta');
-			assert.isFalse(checks['meta-viewport'].evaluate.call(checkContext, node));
+			assert.isFalse(
+				axe.testUtils.getCheckEvaluate('meta-viewport').call(checkContext, node)
+			);
 		});
 
 		it('should return true on negative maximum scale (should be ignored)', function() {
 			fixture.innerHTML = '<meta name="viewport" content="maximum-scale=-1">';
 			var node = fixture.querySelector('meta');
-			assert.isTrue(checks['meta-viewport'].evaluate.call(checkContext, node));
+			assert.isTrue(
+				axe.testUtils.getCheckEvaluate('meta-viewport').call(checkContext, node)
+			);
 		});
 
 		it('should return true if maximum-scale >= options.scaleMinimum', function() {
@@ -52,16 +60,20 @@ describe('meta-viewport', function() {
 			var node = fixture.querySelector('meta');
 
 			assert.isTrue(
-				checks['meta-viewport'].evaluate.call(checkContext, node, {
-					scaleMinimum: 2
-				})
+				axe.testUtils
+					.getCheckEvaluate('meta-viewport')
+					.call(checkContext, node, {
+						scaleMinimum: 2
+					})
 			);
 
 			fixture.innerHTML =
 				'<meta name="viewport" content="foo=bar, maximum-scale=3, cats=dogs">';
 			node = fixture.querySelector('meta');
 
-			assert.isTrue(checks['meta-viewport'].evaluate.call(checkContext, node));
+			assert.isTrue(
+				axe.testUtils.getCheckEvaluate('meta-viewport').call(checkContext, node)
+			);
 		});
 
 		it('should return false on maximum-scale < options.scaleMinimum', function() {
@@ -70,9 +82,11 @@ describe('meta-viewport', function() {
 			var node = fixture.querySelector('meta');
 
 			assert.isFalse(
-				checks['meta-viewport'].evaluate.call(checkContext, node, {
-					scaleMinimum: 2
-				})
+				axe.testUtils
+					.getCheckEvaluate('meta-viewport')
+					.call(checkContext, node, {
+						scaleMinimum: 2
+					})
 			);
 			assert.deepEqual(checkContext._data, 'maximum-scale');
 		});
@@ -81,7 +95,9 @@ describe('meta-viewport', function() {
 			fixture.innerHTML = '<meta name="viewport" content="foo=bar, cats=dogs">';
 			var node = fixture.querySelector('meta');
 
-			assert.isTrue(checks['meta-viewport'].evaluate.call(checkContext, node));
+			assert.isTrue(
+				axe.testUtils.getCheckEvaluate('meta-viewport').call(checkContext, node)
+			);
 		});
 	});
 
@@ -91,7 +107,9 @@ describe('meta-viewport', function() {
 				'<meta name="viewport" content="foo=bar, cats=dogs, user-scalable=no">';
 			var node = fixture.querySelector('meta');
 
-			assert.isFalse(checks['meta-viewport'].evaluate.call(checkContext, node));
+			assert.isFalse(
+				axe.testUtils.getCheckEvaluate('meta-viewport').call(checkContext, node)
+			);
 			assert.deepEqual(checkContext._data, 'user-scalable=no');
 		});
 
@@ -100,7 +118,9 @@ describe('meta-viewport', function() {
 				'<meta name="viewport" content="foo=bar, cats=dogs, user-scalable=no, more-stuff=ok">';
 			var node = fixture.querySelector('meta');
 
-			assert.isFalse(checks['meta-viewport'].evaluate.call(checkContext, node));
+			assert.isFalse(
+				axe.testUtils.getCheckEvaluate('meta-viewport').call(checkContext, node)
+			);
 			assert.deepEqual(checkContext._data, 'user-scalable=no');
 		});
 
@@ -109,7 +129,9 @@ describe('meta-viewport', function() {
 				'<meta name="viewport" content="foo=bar, cats=dogs, user-scalable=yes, more-stuff=ok">';
 			var node = fixture.querySelector('meta');
 
-			assert.isTrue(checks['meta-viewport'].evaluate.call(checkContext, node));
+			assert.isTrue(
+				axe.testUtils.getCheckEvaluate('meta-viewport').call(checkContext, node)
+			);
 		});
 
 		it('should return true if maximum-scale >= options.scaleMinimum', function() {
@@ -117,16 +139,20 @@ describe('meta-viewport', function() {
 				'<meta name="viewport" content="foo=bar, maximum-scale=5, cats=dogs">';
 			var node = fixture.querySelector('meta');
 
-			assert.isTrue(checks['meta-viewport'].evaluate.call(checkContext, node));
+			assert.isTrue(
+				axe.testUtils.getCheckEvaluate('meta-viewport').call(checkContext, node)
+			);
 
 			fixture.innerHTML =
 				'<meta name="viewport" content="foo=bar, maximum-scale=2, cats=dogs">';
 			node = fixture.querySelector('meta');
 
 			assert.isTrue(
-				checks['meta-viewport'].evaluate.call(checkContext, node, {
-					scaleMinimum: 2
-				})
+				axe.testUtils
+					.getCheckEvaluate('meta-viewport')
+					.call(checkContext, node, {
+						scaleMinimum: 2
+					})
 			);
 		});
 
@@ -136,9 +162,11 @@ describe('meta-viewport', function() {
 			var node = fixture.querySelector('meta');
 
 			assert.isFalse(
-				checks['meta-viewport'].evaluate.call(checkContext, node, {
-					scaleMinimum: 2
-				})
+				axe.testUtils
+					.getCheckEvaluate('meta-viewport')
+					.call(checkContext, node, {
+						scaleMinimum: 2
+					})
 			);
 		});
 
@@ -146,7 +174,9 @@ describe('meta-viewport', function() {
 			fixture.innerHTML = '<meta name="viewport" content="foo=bar, cats=dogs">';
 			var node = fixture.querySelector('meta');
 
-			assert.isTrue(checks['meta-viewport'].evaluate.call(checkContext, node));
+			assert.isTrue(
+				axe.testUtils.getCheckEvaluate('meta-viewport').call(checkContext, node)
+			);
 		});
 	});
 });
diff --git a/test/checks/navigation/header-present.js b/test/checks/navigation/header-present.js
index ecbfd4ecbc..8e534efa21 100644
--- a/test/checks/navigation/header-present.js
+++ b/test/checks/navigation/header-present.js
@@ -16,46 +16,62 @@ describe('header-present', function() {
 	it('should return true if h1-h6 is found', function() {
 		var params = checkSetup('<h1 id="target">Hi</h1>');
 		assert.isTrue(
-			checks['header-present'].evaluate.apply(checkContext, params)
+			axe.testUtils
+				.getCheckEvaluate('header-present')
+				.apply(checkContext, params)
 		);
 
 		params = checkSetup('<h2 id="target">Hi</h2>');
 		assert.isTrue(
-			checks['header-present'].evaluate.apply(checkContext, params)
+			axe.testUtils
+				.getCheckEvaluate('header-present')
+				.apply(checkContext, params)
 		);
 
 		params = checkSetup('<h3 id="target">Hi</h3>');
 		assert.isTrue(
-			checks['header-present'].evaluate.apply(checkContext, params)
+			axe.testUtils
+				.getCheckEvaluate('header-present')
+				.apply(checkContext, params)
 		);
 
 		params = checkSetup('<h4 id="target">Hi</h4>');
 		assert.isTrue(
-			checks['header-present'].evaluate.apply(checkContext, params)
+			axe.testUtils
+				.getCheckEvaluate('header-present')
+				.apply(checkContext, params)
 		);
 
 		params = checkSetup('<h5 id="target">Hi</h5>');
 		assert.isTrue(
-			checks['header-present'].evaluate.apply(checkContext, params)
+			axe.testUtils
+				.getCheckEvaluate('header-present')
+				.apply(checkContext, params)
 		);
 
 		params = checkSetup('<h6 id="target">Hi</h6>');
 		assert.isTrue(
-			checks['header-present'].evaluate.apply(checkContext, params)
+			axe.testUtils
+				.getCheckEvaluate('header-present')
+				.apply(checkContext, params)
 		);
 	});
 
 	it('should return true if role=heading is found', function() {
 		var params = checkSetup('<div role="heading" id="target">Hi</div>');
 		assert.isTrue(
-			checks['header-present'].evaluate.apply(checkContext, params)
+			axe.testUtils
+				.getCheckEvaluate('header-present')
+				.apply(checkContext, params)
 		);
 	});
 
 	it('should otherwise return false', function() {
 		var params = checkSetup('<p id="target">Some stuff and stuff</p>');
 		assert.isFalse(
-			checks['header-present'].evaluate.apply(checkContext, params)
+			axe.testUtils
+				.getCheckEvaluate('header-present')
+				.apply(checkContext, params)
 		);
 	});
 
@@ -64,7 +80,9 @@ describe('header-present', function() {
 		function() {
 			var params = shadowCheckSetup('<div id="target"><div>', '<h1></h1>');
 			assert.isTrue(
-				checks['header-present'].evaluate.apply(checkContext, params)
+				axe.testUtils
+					.getCheckEvaluate('header-present')
+					.apply(checkContext, params)
 			);
 		}
 	);
diff --git a/test/checks/navigation/heading-order.js b/test/checks/navigation/heading-order.js
index cd89d61450..11db9b1979 100644
--- a/test/checks/navigation/heading-order.js
+++ b/test/checks/navigation/heading-order.js
@@ -14,28 +14,36 @@ describe('heading-order', function() {
 		fixture.innerHTML =
 			'<div role="aria-heading" aria-level="1" id="target">One</h1><h3>Three</h3>';
 		var node = fixture.querySelector('#target');
-		assert.isTrue(checks['heading-order'].evaluate.call(checkContext, node));
+		assert.isTrue(
+			axe.testUtils.getCheckEvaluate('heading-order').call(checkContext, node)
+		);
 		assert.equal(checkContext._data, 1);
 	});
 
 	it('should store the header level as a number', function() {
 		fixture.innerHTML = '<h1 id="target">One</h1><h3>Three</h3>';
 		var node = fixture.querySelector('#target');
-		assert.isTrue(checks['heading-order'].evaluate.call(checkContext, node));
+		assert.isTrue(
+			axe.testUtils.getCheckEvaluate('heading-order').call(checkContext, node)
+		);
 		assert.isNumber(checkContext._data);
 	});
 
 	it('should store the correct header level for hn tags and return true', function() {
 		fixture.innerHTML = '<h1 id="target">One</h1><h3>Three</h3>';
 		var node = fixture.querySelector('#target');
-		assert.isTrue(checks['heading-order'].evaluate.call(checkContext, node));
+		assert.isTrue(
+			axe.testUtils.getCheckEvaluate('heading-order').call(checkContext, node)
+		);
 		assert.equal(checkContext._data, 1);
 	});
 
 	it('should return true and put nothing in data for non-headers', function() {
 		fixture.innerHTML = '<div id="target">One</div><h3>Three</h3>';
 		var node = fixture.querySelector('#target');
-		assert.isTrue(checks['heading-order'].evaluate.call(checkContext, node));
+		assert.isTrue(
+			axe.testUtils.getCheckEvaluate('heading-order').call(checkContext, node)
+		);
 		assert.equal(checkContext._data, null);
 	});
 
diff --git a/test/checks/navigation/internal-link-present.js b/test/checks/navigation/internal-link-present.js
index 087b927dcb..07b6743fb8 100644
--- a/test/checks/navigation/internal-link-present.js
+++ b/test/checks/navigation/internal-link-present.js
@@ -16,28 +16,36 @@ describe('internal-link-present', function() {
 	it('should return true when an internal link is found', function() {
 		var params = checkSetup('<div id="target"><a href="#haha">hi</a></div>');
 		assert.isTrue(
-			checks['internal-link-present'].evaluate.apply(checkContext, params)
+			axe.testUtils
+				.getCheckEvaluate('internal-link-present')
+				.apply(checkContext, params)
 		);
 	});
 
 	it('should return false when a hashbang URL was used', function() {
 		var params = checkSetup('<div id="target"><a href="#!foo">hi</a></div>');
 		assert.isFalse(
-			checks['internal-link-present'].evaluate.apply(checkContext, params)
+			axe.testUtils
+				.getCheckEvaluate('internal-link-present')
+				.apply(checkContext, params)
 		);
 	});
 
 	it('should return false when a hash route URL was used', function() {
 		var params = checkSetup('<div id="target"><a href="#/home">hi</a></div>');
 		assert.isFalse(
-			checks['internal-link-present'].evaluate.apply(checkContext, params)
+			axe.testUtils
+				.getCheckEvaluate('internal-link-present')
+				.apply(checkContext, params)
 		);
 	});
 
 	it('should return false when a hashbang + slash route URL was used', function() {
 		var params = checkSetup('<div id="target"><a href="#!/home">hi</a></div>');
 		assert.isFalse(
-			checks['internal-link-present'].evaluate.apply(checkContext, params)
+			axe.testUtils
+				.getCheckEvaluate('internal-link-present')
+				.apply(checkContext, params)
 		);
 	});
 
@@ -46,7 +54,9 @@ describe('internal-link-present', function() {
 			'<div id="target"><a href="http://www.deque.com/#haha">hi</a></div>'
 		);
 		assert.isFalse(
-			checks['internal-link-present'].evaluate.apply(checkContext, params)
+			axe.testUtils
+				.getCheckEvaluate('internal-link-present')
+				.apply(checkContext, params)
 		);
 	});
 
@@ -58,7 +68,9 @@ describe('internal-link-present', function() {
 				'<a href="#haha">hi</a>'
 			);
 			assert.isTrue(
-				checks['internal-link-present'].evaluate.apply(checkContext, params)
+				axe.testUtils
+					.getCheckEvaluate('internal-link-present')
+					.apply(checkContext, params)
 			);
 		}
 	);
diff --git a/test/checks/navigation/meta-refresh.js b/test/checks/navigation/meta-refresh.js
index 99c8311112..be2a03693c 100644
--- a/test/checks/navigation/meta-refresh.js
+++ b/test/checks/navigation/meta-refresh.js
@@ -11,7 +11,7 @@ describe('meta-refresh', function() {
 			fixture.innerHTML = '<meta name="refresh" content="300">';
 			var node = fixture.querySelector('meta');
 
-			assert.isFalse(checks['meta-refresh'].evaluate(node));
+			assert.isFalse(axe.testUtils.getCheckEvaluate('meta-refresh')(node));
 		});
 
 		it('should return false if content value does not start with 0', function() {
@@ -19,7 +19,7 @@ describe('meta-refresh', function() {
 				'<meta name="refresh" content="300;URL=something.html">';
 			var node = fixture.querySelector('meta');
 
-			assert.isFalse(checks['meta-refresh'].evaluate(node));
+			assert.isFalse(axe.testUtils.getCheckEvaluate('meta-refresh')(node));
 		});
 
 		it('should return true if content value starts with 0', function() {
@@ -27,21 +27,21 @@ describe('meta-refresh', function() {
 				'<meta name="refresh" content="0;URL=something.html">';
 			var node = fixture.querySelector('meta');
 
-			assert.isTrue(checks['meta-refresh'].evaluate(node));
+			assert.isTrue(axe.testUtils.getCheckEvaluate('meta-refresh')(node));
 		});
 
 		it('should return true if content value is 0', function() {
 			fixture.innerHTML = '<meta name="refresh" content="0">';
 			var node = fixture.querySelector('meta');
 
-			assert.isTrue(checks['meta-refresh'].evaluate(node));
+			assert.isTrue(axe.testUtils.getCheckEvaluate('meta-refresh')(node));
 		});
 
 		it('should return true if there is no content value', function() {
 			fixture.innerHTML = '<meta name="refresh">';
 			var node = fixture.querySelector('meta');
 
-			assert.isTrue(checks['meta-refresh'].evaluate(node));
+			assert.isTrue(axe.testUtils.getCheckEvaluate('meta-refresh')(node));
 		});
 	});
 });
diff --git a/test/checks/navigation/p-as-heading.js b/test/checks/navigation/p-as-heading.js
index 3161b04c5f..02dcadb6a7 100644
--- a/test/checks/navigation/p-as-heading.js
+++ b/test/checks/navigation/p-as-heading.js
@@ -22,12 +22,16 @@ describe('p-as-heading', function() {
 			'<p id="target">elm 1</p> <p>elm 2</p>',
 			testOptions
 		);
-		assert.isTrue(checks['p-as-heading'].evaluate.apply(checkContext, params));
+		assert.isTrue(
+			axe.testUtils.getCheckEvaluate('p-as-heading').apply(checkContext, params)
+		);
 	});
 
 	it('returns true if there is no p element following it', function() {
 		var params = checkSetup('<p id="target">lone elm</p>', testOptions);
-		assert.isTrue(checks['p-as-heading'].evaluate.apply(checkContext, params));
+		assert.isTrue(
+			axe.testUtils.getCheckEvaluate('p-as-heading').apply(checkContext, params)
+		);
 	});
 
 	it('returns false if the font-weight is heavier', function() {
@@ -35,7 +39,9 @@ describe('p-as-heading', function() {
 			'<p id="target" style="font-weight:bold">elm 1</p>' + '<p>elm 2</p>',
 			testOptions
 		);
-		assert.isFalse(checks['p-as-heading'].evaluate.apply(checkContext, params));
+		assert.isFalse(
+			axe.testUtils.getCheckEvaluate('p-as-heading').apply(checkContext, params)
+		);
 	});
 
 	it('returns false if the font-size is bigger', function() {
@@ -43,7 +49,9 @@ describe('p-as-heading', function() {
 			'<p id="target" style="font-size:150%">elm 1</p> <p>elm 2</p>',
 			testOptions
 		);
-		assert.isFalse(checks['p-as-heading'].evaluate.apply(checkContext, params));
+		assert.isFalse(
+			axe.testUtils.getCheckEvaluate('p-as-heading').apply(checkContext, params)
+		);
 	});
 
 	it('returns false if the fake heading is italic and the text is not', function() {
@@ -51,7 +59,9 @@ describe('p-as-heading', function() {
 			'<p id="target" style="font-style:italic">elm 1</p> <p>elm 2</p>',
 			testOptions
 		);
-		assert.isFalse(checks['p-as-heading'].evaluate.apply(checkContext, params));
+		assert.isFalse(
+			axe.testUtils.getCheckEvaluate('p-as-heading').apply(checkContext, params)
+		);
 	});
 
 	it('returns true if both texts are bold, italic and larger', function() {
@@ -60,7 +70,9 @@ describe('p-as-heading', function() {
 				'<p style="font: italic bold 120% bold">elm 2</p>',
 			testOptions
 		);
-		assert.isTrue(checks['p-as-heading'].evaluate.apply(checkContext, params));
+		assert.isTrue(
+			axe.testUtils.getCheckEvaluate('p-as-heading').apply(checkContext, params)
+		);
 	});
 
 	it('considers styles of elements inside the paragraph', function() {
@@ -68,7 +80,9 @@ describe('p-as-heading', function() {
 			'<p id="target"><b>elm 1</b></p> <p>elm 2</p>',
 			testOptions
 		);
-		assert.isFalse(checks['p-as-heading'].evaluate.apply(checkContext, params));
+		assert.isFalse(
+			axe.testUtils.getCheckEvaluate('p-as-heading').apply(checkContext, params)
+		);
 	});
 
 	it('ignores empty child element for style', function() {
@@ -76,7 +90,9 @@ describe('p-as-heading', function() {
 			'<p id="target"><span> </span><b>elm 1</b></p> <p>elm 2</p>',
 			testOptions
 		);
-		assert.isFalse(checks['p-as-heading'].evaluate.apply(checkContext, params));
+		assert.isFalse(
+			axe.testUtils.getCheckEvaluate('p-as-heading').apply(checkContext, params)
+		);
 	});
 
 	it('considers styles of elements that do not contain all the text', function() {
@@ -84,7 +100,9 @@ describe('p-as-heading', function() {
 			'<p id="target"><b>elm</b> 1</p> <p>elm 2</p>',
 			testOptions
 		);
-		assert.isTrue(checks['p-as-heading'].evaluate.apply(checkContext, params));
+		assert.isTrue(
+			axe.testUtils.getCheckEvaluate('p-as-heading').apply(checkContext, params)
+		);
 	});
 
 	it('returns undefined instead of false if the element is inside a blockquote', function() {
@@ -95,7 +113,7 @@ describe('p-as-heading', function() {
 			testOptions
 		);
 		assert.isUndefined(
-			checks['p-as-heading'].evaluate.apply(checkContext, params)
+			axe.testUtils.getCheckEvaluate('p-as-heading').apply(checkContext, params)
 		);
 	});
 
@@ -106,7 +124,9 @@ describe('p-as-heading', function() {
 				'</blockquote>',
 			testOptions
 		);
-		assert.isTrue(checks['p-as-heading'].evaluate.apply(checkContext, params));
+		assert.isTrue(
+			axe.testUtils.getCheckEvaluate('p-as-heading').apply(checkContext, params)
+		);
 	});
 
 	it('returns undefined if a previous sibling has a similar font-weight', function() {
@@ -117,7 +137,7 @@ describe('p-as-heading', function() {
 			testOptions
 		);
 		assert.isUndefined(
-			checks['p-as-heading'].evaluate.apply(checkContext, params)
+			axe.testUtils.getCheckEvaluate('p-as-heading').apply(checkContext, params)
 		);
 	});
 
@@ -130,7 +150,9 @@ describe('p-as-heading', function() {
 				options
 			);
 			assert.isTrue(
-				checks['p-as-heading'].evaluate.apply(checkContext, params)
+				axe.testUtils
+					.getCheckEvaluate('p-as-heading')
+					.apply(checkContext, params)
 			);
 		});
 
@@ -144,7 +166,9 @@ describe('p-as-heading', function() {
 				options
 			);
 			assert.isTrue(
-				checks['p-as-heading'].evaluate.apply(checkContext, params)
+				axe.testUtils
+					.getCheckEvaluate('p-as-heading')
+					.apply(checkContext, params)
 			);
 		});
 
@@ -159,7 +183,9 @@ describe('p-as-heading', function() {
 				options
 			);
 			assert.isFalse(
-				checks['p-as-heading'].evaluate.apply(checkContext, params)
+				axe.testUtils
+					.getCheckEvaluate('p-as-heading')
+					.apply(checkContext, params)
 			);
 		});
 
@@ -173,7 +199,9 @@ describe('p-as-heading', function() {
 				options
 			);
 			assert.isTrue(
-				checks['p-as-heading'].evaluate.apply(checkContext, params)
+				axe.testUtils
+					.getCheckEvaluate('p-as-heading')
+					.apply(checkContext, params)
 			);
 		});
 
@@ -187,7 +215,9 @@ describe('p-as-heading', function() {
 				options
 			);
 			assert.isFalse(
-				checks['p-as-heading'].evaluate.apply(checkContext, params)
+				axe.testUtils
+					.getCheckEvaluate('p-as-heading')
+					.apply(checkContext, params)
 			);
 		});
 
@@ -206,7 +236,9 @@ describe('p-as-heading', function() {
 				options
 			);
 			assert.isTrue(
-				checks['p-as-heading'].evaluate.apply(checkContext, params)
+				axe.testUtils
+					.getCheckEvaluate('p-as-heading')
+					.apply(checkContext, params)
 			);
 		});
 	});
@@ -220,7 +252,9 @@ describe('p-as-heading', function() {
 				testOptions
 			);
 			assert.isUndefined(
-				checks['p-as-heading'].evaluate.apply(checkContext, params)
+				axe.testUtils
+					.getCheckEvaluate('p-as-heading')
+					.apply(checkContext, params)
 			);
 		}
 	);
@@ -234,7 +268,9 @@ describe('p-as-heading', function() {
 				testOptions
 			);
 			assert.isTrue(
-				checks['p-as-heading'].evaluate.apply(checkContext, params)
+				axe.testUtils
+					.getCheckEvaluate('p-as-heading')
+					.apply(checkContext, params)
 			);
 		}
 	);
diff --git a/test/checks/navigation/skip-link.js b/test/checks/navigation/skip-link.js
index 1b9eac0a27..a3e687e36a 100644
--- a/test/checks/navigation/skip-link.js
+++ b/test/checks/navigation/skip-link.js
@@ -12,21 +12,21 @@ describe('skip-link', function() {
 			'<a href="#target">Click Here</a><h1 id="target">Introduction</h1>';
 		axe._tree = axe.utils.getFlattenedTree(fixture);
 		var node = fixture.querySelector('a');
-		assert.isTrue(checks['skip-link'].evaluate(node));
+		assert.isTrue(axe.testUtils.getCheckEvaluate('skip-link')(node));
 	});
 
 	it('should return true if the href points to an element with an name', function() {
 		fixture.innerHTML = '<a href="#target">Click Here</a><a name="target"></a>';
 		axe._tree = axe.utils.getFlattenedTree(fixture);
 		var node = fixture.querySelector('a');
-		assert.isTrue(checks['skip-link'].evaluate(node));
+		assert.isTrue(axe.testUtils.getCheckEvaluate('skip-link')(node));
 	});
 
 	it('should return false if the href points to a non-existent element', function() {
 		fixture.innerHTML =
 			'<a href="#spacecamp">Click Here</a><h1 id="mainheader">Introduction</h1>';
 		var node = fixture.querySelector('a');
-		assert.isFalse(checks['skip-link'].evaluate(node));
+		assert.isFalse(axe.testUtils.getCheckEvaluate('skip-link')(node));
 	});
 
 	it('should return undefined if the target has display:none', function() {
@@ -34,7 +34,7 @@ describe('skip-link', function() {
 			'<a href="#target">Click Here</a>' +
 			'<h1 id="target" style="display:none">Introduction</h1>';
 		var node = fixture.querySelector('a');
-		assert.isUndefined(checks['skip-link'].evaluate(node));
+		assert.isUndefined(axe.testUtils.getCheckEvaluate('skip-link')(node));
 	});
 
 	it('should return undefined if the target has aria-hidden=true', function() {
@@ -42,6 +42,6 @@ describe('skip-link', function() {
 			'<a href="#target">Click Here</a>' +
 			'<h1 id="target" aria-hidden="true">Introduction</h1>';
 		var node = fixture.querySelector('a');
-		assert.isUndefined(checks['skip-link'].evaluate(node));
+		assert.isUndefined(axe.testUtils.getCheckEvaluate('skip-link')(node));
 	});
 });
diff --git a/test/checks/navigation/unique-frame-title.js b/test/checks/navigation/unique-frame-title.js
index 0d2727f7fb..d406392885 100644
--- a/test/checks/navigation/unique-frame-title.js
+++ b/test/checks/navigation/unique-frame-title.js
@@ -9,7 +9,7 @@ describe('unique-frame-title', function() {
 
 	it('should log title to data and return true', function() {
 		assert.isTrue(
-			checks['unique-frame-title'].evaluate.call(checkContext, {
+			axe.testUtils.getCheckEvaluate('unique-frame-title').call(checkContext, {
 				title: 'bananas'
 			})
 		);
@@ -17,14 +17,14 @@ describe('unique-frame-title', function() {
 	});
 
 	it('should convert text to lower case', function() {
-		checks['unique-frame-title'].evaluate.call(checkContext, {
+		axe.testUtils.getCheckEvaluate('unique-frame-title').call(checkContext, {
 			title: '\t  app\t \n \rle  '
 		});
 		assert.equal(checkContext._data, 'app le');
 	});
 
 	it('should take out space differences', function() {
-		checks['unique-frame-title'].evaluate.call(checkContext, {
+		axe.testUtils.getCheckEvaluate('unique-frame-title').call(checkContext, {
 			title: 'APPLE'
 		});
 		assert.equal(checkContext._data, 'apple');
diff --git a/test/checks/parser/duplicate-id.js b/test/checks/parser/duplicate-id.js
index 71b5216db8..dab33a38bc 100644
--- a/test/checks/parser/duplicate-id.js
+++ b/test/checks/parser/duplicate-id.js
@@ -14,7 +14,9 @@ describe('duplicate-id', function() {
 	it('should return true if there is only one element with an ID', function() {
 		fixture.innerHTML = '<div id="target"></div>';
 		var node = fixture.querySelector('#target');
-		assert.isTrue(checks['duplicate-id'].evaluate.call(checkContext, node));
+		assert.isTrue(
+			axe.testUtils.getCheckEvaluate('duplicate-id').call(checkContext, node)
+		);
 		assert.equal(checkContext._data, node.id);
 		assert.deepEqual(checkContext._relatedNodes, []);
 	});
@@ -22,7 +24,9 @@ describe('duplicate-id', function() {
 	it('should return false if there are multiple elements with an ID', function() {
 		fixture.innerHTML = '<div id="target"></div><div id="target"></div>';
 		var node = fixture.querySelector('#target');
-		assert.isFalse(checks['duplicate-id'].evaluate.call(checkContext, node));
+		assert.isFalse(
+			axe.testUtils.getCheckEvaluate('duplicate-id').call(checkContext, node)
+		);
 		assert.equal(checkContext._data, node.id);
 		assert.deepEqual(checkContext._relatedNodes, [node.nextSibling]);
 	});
@@ -43,7 +47,9 @@ describe('duplicate-id', function() {
 			'<div data-testelm="1" id=""></div><div data-testelm="2"  id=""></div>';
 		var node = fixture.querySelector('[data-testelm="1"]');
 
-		assert.isTrue(checks['duplicate-id'].evaluate.call(checkContext, node));
+		assert.isTrue(
+			axe.testUtils.getCheckEvaluate('duplicate-id').call(checkContext, node)
+		);
 	});
 
 	it('should allow overwrote ids', function() {
@@ -53,7 +59,9 @@ describe('duplicate-id', function() {
 			'</label></form>';
 		var node = fixture.querySelector('[data-testelm="1"]');
 
-		assert.isTrue(checks['duplicate-id'].evaluate.call(checkContext, node));
+		assert.isTrue(
+			axe.testUtils.getCheckEvaluate('duplicate-id').call(checkContext, node)
+		);
 	});
 
 	(shadowSupport.v1 ? it : xit)(
@@ -66,7 +74,9 @@ describe('duplicate-id', function() {
 			var node = shadow.querySelector('span');
 			fixture.appendChild(div);
 
-			assert.isFalse(checks['duplicate-id'].evaluate.call(checkContext, node));
+			assert.isFalse(
+				axe.testUtils.getCheckEvaluate('duplicate-id').call(checkContext, node)
+			);
 			assert.lengthOf(checkContext._relatedNodes, 1);
 			assert.deepEqual(checkContext._relatedNodes, [shadow.querySelector('p')]);
 		}
@@ -81,7 +91,9 @@ describe('duplicate-id', function() {
 			shadow.innerHTML = '<span id="target"></span>';
 			fixture.appendChild(node);
 
-			assert.isTrue(checks['duplicate-id'].evaluate.call(checkContext, node));
+			assert.isTrue(
+				axe.testUtils.getCheckEvaluate('duplicate-id').call(checkContext, node)
+			);
 			assert.lengthOf(checkContext._relatedNodes, 0);
 		}
 	);
@@ -96,7 +108,9 @@ describe('duplicate-id', function() {
 			var node = shadow.querySelector('#target');
 			fixture.appendChild(div);
 
-			assert.isTrue(checks['duplicate-id'].evaluate.call(checkContext, node));
+			assert.isTrue(
+				axe.testUtils.getCheckEvaluate('duplicate-id').call(checkContext, node)
+			);
 			assert.lengthOf(checkContext._relatedNodes, 0);
 		}
 	);
@@ -111,7 +125,9 @@ describe('duplicate-id', function() {
 			shadow.innerHTML = '<span id="target"><slot></slot></span>';
 			fixture.appendChild(node);
 
-			assert.isFalse(checks['duplicate-id'].evaluate.call(checkContext, node));
+			assert.isFalse(
+				axe.testUtils.getCheckEvaluate('duplicate-id').call(checkContext, node)
+			);
 			assert.lengthOf(checkContext._relatedNodes, 1);
 			assert.deepEqual(checkContext._relatedNodes, [node.querySelector('p')]);
 		}
diff --git a/test/checks/shared/aria-label.js b/test/checks/shared/aria-label.js
index 8c057a58e2..357be8d07a 100644
--- a/test/checks/shared/aria-label.js
+++ b/test/checks/shared/aria-label.js
@@ -10,23 +10,31 @@ describe('aria-label', function() {
 
 	it('should return true if an aria-label is present', function() {
 		var checkArgs = checkSetup('<div id="target" aria-label="woohoo"></div>');
-		assert.isTrue(checks['aria-label'].evaluate.apply(null, checkArgs));
+		assert.isTrue(
+			axe.testUtils.getCheckEvaluate('aria-label').apply(null, checkArgs)
+		);
 	});
 
 	it('should return false if an aria-label is not present', function() {
 		var checkArgs = checkSetup('<div id="target"></div>');
-		assert.isFalse(checks['aria-label'].evaluate.apply(null, checkArgs));
+		assert.isFalse(
+			axe.testUtils.getCheckEvaluate('aria-label').apply(null, checkArgs)
+		);
 	});
 
 	it('should return false if an aria-label is present, but empty', function() {
 		var checkArgs = checkSetup('<div id="target" aria-label=" "></div>');
-		assert.isFalse(checks['aria-label'].evaluate.apply(null, checkArgs));
+		assert.isFalse(
+			axe.testUtils.getCheckEvaluate('aria-label').apply(null, checkArgs)
+		);
 	});
 
 	it('should collapse whitespace', function() {
 		var checkArgs = checkSetup(
 			'<div id="target" aria-label=" \t \n \r \t  \t\r\n "></div>'
 		);
-		assert.isFalse(checks['aria-label'].evaluate.apply(null, checkArgs));
+		assert.isFalse(
+			axe.testUtils.getCheckEvaluate('aria-label').apply(null, checkArgs)
+		);
 	});
 });
diff --git a/test/checks/shared/aria-labelledby.js b/test/checks/shared/aria-labelledby.js
index 1148474e1e..ea0d411708 100644
--- a/test/checks/shared/aria-labelledby.js
+++ b/test/checks/shared/aria-labelledby.js
@@ -17,7 +17,7 @@ describe('aria-labelledby', function() {
 		target.innerHTML = 'bananas';
 		fixtureSetup(target);
 
-		assert.isTrue(checks['aria-labelledby'].evaluate(node));
+		assert.isTrue(axe.testUtils.getCheckEvaluate('aria-labelledby')(node));
 	});
 
 	it('should return true if only one element referenced by aria-labelledby has visible text', function() {
@@ -29,14 +29,14 @@ describe('aria-labelledby', function() {
 		target.innerHTML = 'bananas';
 		fixtureSetup(target);
 
-		assert.isTrue(checks['aria-labelledby'].evaluate(node));
+		assert.isTrue(axe.testUtils.getCheckEvaluate('aria-labelledby')(node));
 	});
 
 	it('should return false if an aria-labelledby is not present', function() {
 		var node = document.createElement('div');
 		fixtureSetup(node);
 
-		assert.isFalse(checks['aria-labelledby'].evaluate(node));
+		assert.isFalse(axe.testUtils.getCheckEvaluate('aria-labelledby')(node));
 	});
 
 	it('should return true if an aria-labelledby is present that references hidden elements', function() {
@@ -49,7 +49,7 @@ describe('aria-labelledby', function() {
 		target.innerHTML = 'bananas';
 		fixtureSetup(target);
 
-		assert.isTrue(checks['aria-labelledby'].evaluate(node));
+		assert.isTrue(axe.testUtils.getCheckEvaluate('aria-labelledby')(node));
 	});
 
 	it('should return false if an aria-labelledby is present, but references an element with only hidden content', function() {
@@ -61,7 +61,7 @@ describe('aria-labelledby', function() {
 		target.innerHTML = '<span style="display: none">bananas</span>';
 		fixtureSetup(target);
 
-		assert.isFalse(checks['aria-labelledby'].evaluate(node));
+		assert.isFalse(axe.testUtils.getCheckEvaluate('aria-labelledby')(node));
 	});
 
 	it('should return true if an aria-labelledby is present that references elements with has aria-hidden=true', function() {
@@ -74,7 +74,7 @@ describe('aria-labelledby', function() {
 		target.innerHTML = 'bananas';
 		fixtureSetup(target);
 
-		assert.isTrue(checks['aria-labelledby'].evaluate(node));
+		assert.isTrue(axe.testUtils.getCheckEvaluate('aria-labelledby')(node));
 	});
 
 	it('should return false if an aria-labelledby is present that references elements with has aria-hidden=true in the content', function() {
@@ -86,6 +86,6 @@ describe('aria-labelledby', function() {
 		target.innerHTML = '<span aria-hidden="true">bananas</span>';
 		fixtureSetup(target);
 
-		assert.isFalse(checks['aria-labelledby'].evaluate(node));
+		assert.isFalse(axe.testUtils.getCheckEvaluate('aria-labelledby')(node));
 	});
 });
diff --git a/test/checks/shared/button-has-visible-text.js b/test/checks/shared/button-has-visible-text.js
index 2d09987f92..17a33e98ef 100644
--- a/test/checks/shared/button-has-visible-text.js
+++ b/test/checks/shared/button-has-visible-text.js
@@ -14,7 +14,9 @@ describe('button-has-visible-text', function() {
 		var checkArgs = checkSetup('<button></button>', 'button');
 
 		assert.isFalse(
-			checks['button-has-visible-text'].evaluate.apply(checkContext, checkArgs)
+			axe.testUtils
+				.getCheckEvaluate('button-has-visible-text')
+				.apply(checkContext, checkArgs)
 		);
 	});
 
@@ -22,7 +24,9 @@ describe('button-has-visible-text', function() {
 		var checkArgs = checkSetup('<button>Name</button>', 'button');
 
 		assert.isTrue(
-			checks['button-has-visible-text'].evaluate.apply(checkContext, checkArgs)
+			axe.testUtils
+				.getCheckEvaluate('button-has-visible-text')
+				.apply(checkContext, checkArgs)
 		);
 		assert.deepEqual(checkContext._data, 'Name');
 	});
@@ -34,7 +38,9 @@ describe('button-has-visible-text', function() {
 		);
 
 		assert.isTrue(
-			checks['button-has-visible-text'].evaluate.apply(checkContext, checkArgs)
+			axe.testUtils
+				.getCheckEvaluate('button-has-visible-text')
+				.apply(checkContext, checkArgs)
 		);
 		assert.deepEqual(checkContext._data, 'Text');
 	});
@@ -43,7 +49,9 @@ describe('button-has-visible-text', function() {
 		var checkArgs = checkSetup('<div role="button"></div>', '[role=button]');
 
 		assert.isFalse(
-			checks['button-has-visible-text'].evaluate.apply(checkContext, checkArgs)
+			axe.testUtils
+				.getCheckEvaluate('button-has-visible-text')
+				.apply(checkContext, checkArgs)
 		);
 	});
 });
diff --git a/test/checks/shared/doc-has-title.js b/test/checks/shared/doc-has-title.js
index cf2628dc4d..d79cff0369 100644
--- a/test/checks/shared/doc-has-title.js
+++ b/test/checks/shared/doc-has-title.js
@@ -10,14 +10,14 @@ describe('doc-has-title', function() {
 	it('should return false if title is empty', function() {
 		var orig = document.title;
 		document.title = '';
-		assert.isFalse(checks['doc-has-title'].evaluate(fixture));
+		assert.isFalse(axe.testUtils.getCheckEvaluate('doc-has-title')(fixture));
 		document.title = orig;
 	});
 
 	it('should return false if title contains only whitespace', function() {
 		var orig = document.title;
 		document.title = ' \t\r\n \n   \r \n\t';
-		assert.isFalse(checks['doc-has-title'].evaluate(fixture));
+		assert.isFalse(axe.testUtils.getCheckEvaluate('doc-has-title')(fixture));
 		document.title = orig;
 	});
 
@@ -25,7 +25,7 @@ describe('doc-has-title', function() {
 		var orig = document.title;
 		document.title = 'Bananas';
 
-		assert.isTrue(checks['doc-has-title'].evaluate(fixture));
+		assert.isTrue(axe.testUtils.getCheckEvaluate('doc-has-title')(fixture));
 		document.title = orig;
 	});
 });
diff --git a/test/checks/shared/has-alt.js b/test/checks/shared/has-alt.js
index 28cb1ffa6a..4527ed1d32 100644
--- a/test/checks/shared/has-alt.js
+++ b/test/checks/shared/has-alt.js
@@ -10,21 +10,29 @@ describe('has-alt', function() {
 
 	it('should return true if an alt is present', function() {
 		var checkArgs = checkSetup('<img id="target" alt="woohoo" />');
-		assert.isTrue(checks['has-alt'].evaluate.apply(null, checkArgs));
+		assert.isTrue(
+			axe.testUtils.getCheckEvaluate('has-alt').apply(null, checkArgs)
+		);
 	});
 
 	it('should return true if an empty alt is present', function() {
 		var checkArgs = checkSetup('<img id="target" alt="" />');
-		assert.isTrue(checks['has-alt'].evaluate.apply(null, checkArgs));
+		assert.isTrue(
+			axe.testUtils.getCheckEvaluate('has-alt').apply(null, checkArgs)
+		);
 	});
 
 	it('should return true if a null alt is present', function() {
 		var checkArgs = checkSetup('<img id="target" alt />');
-		assert.isTrue(checks['has-alt'].evaluate.apply(null, checkArgs));
+		assert.isTrue(
+			axe.testUtils.getCheckEvaluate('has-alt').apply(null, checkArgs)
+		);
 	});
 
 	it('should return false if an alt is not present', function() {
 		var checkArgs = checkSetup('<img id="target" />');
-		assert.isFalse(checks['has-alt'].evaluate.apply(null, checkArgs));
+		assert.isFalse(
+			axe.testUtils.getCheckEvaluate('has-alt').apply(null, checkArgs)
+		);
 	});
 });
diff --git a/test/checks/shared/has-visible-text.js b/test/checks/shared/has-visible-text.js
index 2baf330555..dcb2cfe649 100644
--- a/test/checks/shared/has-visible-text.js
+++ b/test/checks/shared/has-visible-text.js
@@ -15,7 +15,9 @@ describe('has-visible-text', function() {
 	it('should return false if there is no visible text', function() {
 		var params = checkSetup('<object id="target"></object>');
 		assert.isFalse(
-			checks['has-visible-text'].evaluate.apply(checkContext, params)
+			axe.testUtils
+				.getCheckEvaluate('has-visible-text')
+				.apply(checkContext, params)
 		);
 	});
 
@@ -24,14 +26,18 @@ describe('has-visible-text', function() {
 			'<object id="target"><span style="display:none">hello!</span></object>'
 		);
 		assert.isFalse(
-			checks['has-visible-text'].evaluate.apply(checkContext, params)
+			axe.testUtils
+				.getCheckEvaluate('has-visible-text')
+				.apply(checkContext, params)
 		);
 	});
 
 	it('should return true if there is visible text', function() {
 		var params = checkSetup('<object id="target">hello!</object>');
 		assert.isTrue(
-			checks['has-visible-text'].evaluate.apply(checkContext, params)
+			axe.testUtils
+				.getCheckEvaluate('has-visible-text')
+				.apply(checkContext, params)
 		);
 	});
 });
diff --git a/test/checks/shared/is-on-screen.js b/test/checks/shared/is-on-screen.js
index 16126f072d..6dcb0be70b 100644
--- a/test/checks/shared/is-on-screen.js
+++ b/test/checks/shared/is-on-screen.js
@@ -7,21 +7,21 @@ describe('is-on-screen', function() {
 		fixture.innerHTML = '<div id="target">elm</div>';
 		var node = fixture.querySelector('#target');
 
-		assert.isTrue(checks['is-on-screen'].evaluate(node));
+		assert.isTrue(axe.testUtils.getCheckEvaluate('is-on-screen')(node));
 	});
 
 	it('should return true for aria-hidden=true elements', function() {
 		fixture.innerHTML = '<div id="target" aria-hidden="true">elm</div>';
 		var node = fixture.querySelector('#target');
 
-		assert.isTrue(checks['is-on-screen'].evaluate(node));
+		assert.isTrue(axe.testUtils.getCheckEvaluate('is-on-screen')(node));
 	});
 
 	it('should return false for display:none elements', function() {
 		fixture.innerHTML = '<div id="target" style="display:none">elm</div>';
 		var node = fixture.querySelector('#target');
 
-		assert.isFalse(checks['is-on-screen'].evaluate(node));
+		assert.isFalse(axe.testUtils.getCheckEvaluate('is-on-screen')(node));
 	});
 
 	it('should return false for off screen elements', function() {
@@ -29,6 +29,6 @@ describe('is-on-screen', function() {
 			'<div id="target" style="position:absolute; top:-10000px">elm</div>';
 		var node = fixture.querySelector('#target');
 
-		assert.isFalse(checks['is-on-screen'].evaluate(node));
+		assert.isFalse(axe.testUtils.getCheckEvaluate('is-on-screen')(node));
 	});
 });
diff --git a/test/checks/shared/non-empty-alt.js b/test/checks/shared/non-empty-alt.js
index 7c84d1fc6d..53a92b50bd 100644
--- a/test/checks/shared/non-empty-alt.js
+++ b/test/checks/shared/non-empty-alt.js
@@ -3,34 +3,29 @@ describe('non-empty-alt', function() {
 
 	var fixture = document.getElementById('fixture');
 	var checkSetup = axe.testUtils.checkSetup;
+	var checkEvaluate = axe.testUtils.getCheckEvaluate('non-empty-alt');
 
 	afterEach(function() {
 		fixture.innerHTML = '';
 	});
 
 	it('should return true if an alt is present', function() {
-		var params = checkSetup('<img id="target" alt="woohoo" />', {
-			attribute: 'alt'
-		});
-		assert.isTrue(checks['non-empty-alt'].evaluate.apply(null, params));
+		var params = checkSetup('<img id="target" alt="woohoo" />');
+		assert.isTrue(checkEvaluate.apply(null, params));
 	});
 
 	it('should return false if an alt is not present', function() {
-		var params = checkSetup('<img id="target" />', { attribute: 'alt' });
-		assert.isFalse(checks['non-empty-alt'].evaluate.apply(null, params));
+		var params = checkSetup('<img id="target" />');
+		assert.isFalse(checkEvaluate.apply(null, params));
 	});
 
 	it('should return false if an alt is present, but empty', function() {
-		var params = checkSetup('<img id="target" alt=" " />', {
-			attribute: 'alt'
-		});
-		assert.isFalse(checks['non-empty-alt'].evaluate.apply(null, params));
+		var params = checkSetup('<img id="target" alt=" " />');
+		assert.isFalse(checkEvaluate.apply(null, params));
 	});
 
 	it('should collapse whitespace', function() {
-		var params = checkSetup('<img id="target" alt=" \t \n \r \t  \t\r\n " />', {
-			attribute: 'alt'
-		});
-		assert.isFalse(checks['non-empty-alt'].evaluate.apply(null, params));
+		var params = checkSetup('<img id="target" alt=" \t \n \r \t  \t\r\n " />');
+		assert.isFalse(checkEvaluate.apply(null, params));
 	});
 });
diff --git a/test/checks/shared/non-empty-if-present.js b/test/checks/shared/non-empty-if-present.js
index 2304f85ef0..e7c97c6f87 100644
--- a/test/checks/shared/non-empty-if-present.js
+++ b/test/checks/shared/non-empty-if-present.js
@@ -22,7 +22,9 @@ describe('non-empty-if-present', function() {
 		fixture.appendChild(node);
 
 		assert.isFalse(
-			checks['non-empty-if-present'].evaluate.call(checkContext, node)
+			axe.testUtils
+				.getCheckEvaluate('non-empty-if-present')
+				.call(checkContext, node)
 		);
 		assert.equal(checkContext._data.messageKey, 'has-label');
 	});
@@ -35,7 +37,9 @@ describe('non-empty-if-present', function() {
 			fixture.appendChild(node);
 
 			assert.isTrue(
-				checks['non-empty-if-present'].evaluate.call(checkContext, node)
+				axe.testUtils
+					.getCheckEvaluate('non-empty-if-present')
+					.call(checkContext, node)
 			);
 			assert.isNull(checkContext._data);
 		}
@@ -48,7 +52,9 @@ describe('non-empty-if-present', function() {
 		fixture.appendChild(node);
 
 		assert.isFalse(
-			checks['non-empty-if-present'].evaluate.call(checkContext, node)
+			axe.testUtils
+				.getCheckEvaluate('non-empty-if-present')
+				.call(checkContext, node)
 		);
 	});
 
@@ -57,21 +63,27 @@ describe('non-empty-if-present', function() {
 		node.setAttribute('type', 'text');
 		fixture.appendChild(node);
 		assert.isFalse(
-			checks['non-empty-if-present'].evaluate.call(checkContext, node)
+			axe.testUtils
+				.getCheckEvaluate('non-empty-if-present')
+				.call(checkContext, node)
 		);
 
 		node = document.createElement('input');
 		node.setAttribute('type', 'button');
 		fixture.appendChild(node);
 		assert.isFalse(
-			checks['non-empty-if-present'].evaluate.call(checkContext, node)
+			axe.testUtils
+				.getCheckEvaluate('non-empty-if-present')
+				.call(checkContext, node)
 		);
 
 		node = document.createElement('button');
 		node.setAttribute('type', 'submit');
 		fixture.appendChild(node);
 		assert.isFalse(
-			checks['non-empty-if-present'].evaluate.call(checkContext, node)
+			axe.testUtils
+				.getCheckEvaluate('non-empty-if-present')
+				.call(checkContext, node)
 		);
 	});
 });
diff --git a/test/checks/shared/non-empty-title.js b/test/checks/shared/non-empty-title.js
index 7408911fb7..234429106d 100644
--- a/test/checks/shared/non-empty-title.js
+++ b/test/checks/shared/non-empty-title.js
@@ -3,39 +3,35 @@ describe('non-empty-title', function() {
 
 	var fixture = document.getElementById('fixture');
 	var checkSetup = axe.testUtils.checkSetup;
+	var checkEvaluate = axe.testUtils.getCheckEvaluate('non-empty-title');
 
 	afterEach(function() {
 		fixture.innerHTML = '';
 	});
 
 	it('should return true if a title is present', function() {
-		var params = checkSetup('<img id="target" title="woohoo" />', {
-			attribute: 'title'
-		});
+		var params = checkSetup('<img id="target" title="woohoo" />');
 
-		assert.isTrue(checks['non-empty-title'].evaluate.apply(null, params));
+		assert.isTrue(checkEvaluate.apply(null, params));
 	});
 
 	it('should return false if a title is not present', function() {
-		var params = checkSetup('<img id="target" />', { attribute: 'title' });
+		var params = checkSetup('<img id="target" />');
 
-		assert.isFalse(checks['non-empty-title'].evaluate.apply(null, params));
+		assert.isFalse(checkEvaluate.apply(null, params));
 	});
 
 	it('should return false if a title is present, but empty', function() {
-		var params = checkSetup('<img id="target" title=" " />', {
-			attribute: 'title'
-		});
+		var params = checkSetup('<img id="target" title=" " />');
 
-		assert.isFalse(checks['non-empty-title'].evaluate.apply(null, params));
+		assert.isFalse(checkEvaluate.apply(null, params));
 	});
 
 	it('should collapse whitespace', function() {
 		var params = checkSetup(
-			'<img id="target" title=" \t \n \r \t  \t\r\n " />',
-			{ attribute: 'title' }
+			'<img id="target" title=" \t \n \r \t  \t\r\n " />'
 		);
 
-		assert.isFalse(checks['non-empty-title'].evaluate.apply(null, params));
+		assert.isFalse(checkEvaluate.apply(null, params));
 	});
 });
diff --git a/test/checks/shared/non-empty-value.js b/test/checks/shared/non-empty-value.js
index 3357bd6521..15a8689fd6 100644
--- a/test/checks/shared/non-empty-value.js
+++ b/test/checks/shared/non-empty-value.js
@@ -3,39 +3,35 @@ describe('non-empty-value', function() {
 
 	var fixture = document.getElementById('fixture');
 	var checkSetup = axe.testUtils.checkSetup;
+	var checkEvaluate = axe.testUtils.getCheckEvaluate('non-empty-value');
 
 	afterEach(function() {
 		fixture.innerHTML = '';
 	});
 
 	it('should return true if an value is present', function() {
-		var params = checkSetup('<input id="target" value="woohoo" />', {
-			attribute: 'value'
-		});
+		var params = checkSetup('<input id="target" value="woohoo" />');
 
-		assert.isTrue(checks['non-empty-value'].evaluate.apply(null, params));
+		assert.isTrue(checkEvaluate.apply(null, params));
 	});
 
 	it('should return false if an value is not present', function() {
-		var params = checkSetup('<input id="target" />', { attribute: 'value' });
+		var params = checkSetup('<input id="target" />');
 
-		assert.isFalse(checks['non-empty-value'].evaluate.apply(null, params));
+		assert.isFalse(checkEvaluate.apply(null, params));
 	});
 
 	it('should return false if an value is present, but empty', function() {
-		var params = checkSetup('<input id="target" value=" " />', {
-			attribute: 'value'
-		});
+		var params = checkSetup('<input id="target" value=" " />');
 
-		assert.isFalse(checks['non-empty-value'].evaluate.apply(null, params));
+		assert.isFalse(checkEvaluate.apply(null, params));
 	});
 
 	it('should collapse whitespace', function() {
 		var params = checkSetup(
-			'<input id="target" value=" \t \n \r \t  \t\r\n " />',
-			{ attribute: 'value' }
+			'<input id="target" value=" \t \n \r \t  \t\r\n " />'
 		);
 
-		assert.isFalse(checks['non-empty-value'].evaluate.apply(null, params));
+		assert.isFalse(checkEvaluate.apply(null, params));
 	});
 });
diff --git a/test/checks/shared/role-none.js b/test/checks/shared/role-none.js
index ae8a801b16..3ef7b3ad42 100644
--- a/test/checks/shared/role-none.js
+++ b/test/checks/shared/role-none.js
@@ -11,20 +11,20 @@ describe('role-none', function() {
 		fixture.innerHTML = '<div role="none"></div>';
 		var node = fixture.querySelector('div');
 
-		assert.isTrue(checks['role-none'].evaluate(node));
+		assert.isTrue(axe.testUtils.getCheckEvaluate('role-none')(node));
 	});
 
 	it('should return false when role !== none', function() {
 		fixture.innerHTML = '<div role="cats"></div>';
 		var node = fixture.querySelector('div');
 
-		assert.isFalse(checks['role-none'].evaluate(node));
+		assert.isFalse(axe.testUtils.getCheckEvaluate('role-none')(node));
 	});
 
 	it('should return false when there is no role attribute', function() {
 		fixture.innerHTML = '<div></div>';
 		var node = fixture.querySelector('div');
 
-		assert.isFalse(checks['role-none'].evaluate(node));
+		assert.isFalse(axe.testUtils.getCheckEvaluate('role-none')(node));
 	});
 });
diff --git a/test/checks/shared/role-presentation.js b/test/checks/shared/role-presentation.js
index 8ea115599a..cfb94086b0 100644
--- a/test/checks/shared/role-presentation.js
+++ b/test/checks/shared/role-presentation.js
@@ -11,20 +11,20 @@ describe('role-presentation', function() {
 		fixture.innerHTML = '<div role="presentation"></div>';
 		var node = fixture.querySelector('div');
 
-		assert.isTrue(checks['role-presentation'].evaluate(node));
+		assert.isTrue(axe.testUtils.getCheckEvaluate('role-presentation')(node));
 	});
 
 	it('should return false when role !== presentation', function() {
 		fixture.innerHTML = '<div role="cats"></div>';
 		var node = fixture.querySelector('div');
 
-		assert.isFalse(checks['role-presentation'].evaluate(node));
+		assert.isFalse(axe.testUtils.getCheckEvaluate('role-presentation')(node));
 	});
 
 	it('should return false when there is no role attribute', function() {
 		fixture.innerHTML = '<div></div>';
 		var node = fixture.querySelector('div');
 
-		assert.isFalse(checks['role-presentation'].evaluate(node));
+		assert.isFalse(axe.testUtils.getCheckEvaluate('role-presentation')(node));
 	});
 });
diff --git a/test/checks/tables/html5-scope.js b/test/checks/tables/html5-scope.js
index a35c5c3b1d..5abc4a3d45 100644
--- a/test/checks/tables/html5-scope.js
+++ b/test/checks/tables/html5-scope.js
@@ -11,14 +11,14 @@ describe('html5-scope', function() {
 		fixture.innerHTML = '<table><tr><th scope="col"></th></tr></table>';
 		var node = fixture.querySelector('th');
 
-		assert.isTrue(checks['html5-scope'].evaluate(node));
+		assert.isTrue(axe.testUtils.getCheckEvaluate('html5-scope')(node));
 	});
 
 	it('should return false on TDs', function() {
 		fixture.innerHTML = '<table><tr><td scope="col"></td></tr></table>';
 		var node = fixture.querySelector('td');
 
-		assert.isFalse(checks['html5-scope'].evaluate(node));
+		assert.isFalse(axe.testUtils.getCheckEvaluate('html5-scope')(node));
 	});
 
 	it('should return true on non-HTML5 documents', function() {
@@ -26,7 +26,7 @@ describe('html5-scope', function() {
 		fixture.innerHTML = '<table><tr><th scope="col"></th></tr></table>';
 		var node = fixture.querySelector('th');
 
-		assert.isTrue(checks['html5-scope'].evaluate(node));
+		assert.isTrue(axe.testUtils.getCheckEvaluate('html5-scope')(node));
 		document.publicId = origPublicId;
 	});
 });
diff --git a/test/checks/tables/same-caption-summary.js b/test/checks/tables/same-caption-summary.js
index d85e20fd4f..86366d0fff 100644
--- a/test/checks/tables/same-caption-summary.js
+++ b/test/checks/tables/same-caption-summary.js
@@ -20,7 +20,9 @@ describe('same-caption-summary', function() {
 		);
 
 		assert.isFalse(
-			checks['same-caption-summary'].evaluate.apply(checkContext, params)
+			axe.testUtils
+				.getCheckEvaluate('same-caption-summary')
+				.apply(checkContext, params)
 		);
 	});
 
@@ -30,7 +32,9 @@ describe('same-caption-summary', function() {
 		);
 
 		assert.isFalse(
-			checks['same-caption-summary'].evaluate.apply(checkContext, params)
+			axe.testUtils
+				.getCheckEvaluate('same-caption-summary')
+				.apply(checkContext, params)
 		);
 	});
 
@@ -40,7 +44,9 @@ describe('same-caption-summary', function() {
 		);
 
 		assert.isFalse(
-			checks['same-caption-summary'].evaluate.apply(checkContext, params)
+			axe.testUtils
+				.getCheckEvaluate('same-caption-summary')
+				.apply(checkContext, params)
 		);
 	});
 
@@ -50,7 +56,9 @@ describe('same-caption-summary', function() {
 		);
 
 		assert.isTrue(
-			checks['same-caption-summary'].evaluate.apply(checkContext, params)
+			axe.testUtils
+				.getCheckEvaluate('same-caption-summary')
+				.apply(checkContext, params)
 		);
 	});
 
@@ -68,7 +76,9 @@ describe('same-caption-summary', function() {
 		);
 
 		assert.isTrue(
-			checks['same-caption-summary'].evaluate.apply(checkContext, params)
+			axe.testUtils
+				.getCheckEvaluate('same-caption-summary')
+				.apply(checkContext, params)
 		);
 	});
 
@@ -88,7 +98,9 @@ describe('same-caption-summary', function() {
 			);
 
 			assert.isTrue(
-				checks['same-caption-summary'].evaluate.apply(checkContext, params)
+				axe.testUtils
+					.getCheckEvaluate('same-caption-summary')
+					.apply(checkContext, params)
 			);
 		}
 	);
diff --git a/test/checks/tables/scope-value.js b/test/checks/tables/scope-value.js
index 289b7a85f5..9964266f55 100644
--- a/test/checks/tables/scope-value.js
+++ b/test/checks/tables/scope-value.js
@@ -11,14 +11,14 @@ describe('scope-value', function() {
 		fixture.innerHTML = '<table><tr><td scope="col"></td></tr></table>';
 		var node = fixture.querySelector('td');
 
-		assert.isTrue(checks['scope-value'].evaluate(node));
+		assert.isTrue(axe.testUtils.getCheckEvaluate('scope-value')(node));
 	});
 
 	it('should return true if scope is "row"', function() {
 		fixture.innerHTML = '<table><tr><td scope="row"></td></tr></table>';
 		var node = fixture.querySelector('td');
 
-		assert.isTrue(checks['scope-value'].evaluate(node));
+		assert.isTrue(axe.testUtils.getCheckEvaluate('scope-value')(node));
 	});
 
 	it('should return false otherwise', function() {
@@ -26,6 +26,6 @@ describe('scope-value', function() {
 			'<table><tr><td scope="hahahahanothx"></td></tr></table>';
 		var node = fixture.querySelector('td');
 
-		assert.isFalse(checks['scope-value'].evaluate(node));
+		assert.isFalse(axe.testUtils.getCheckEvaluate('scope-value')(node));
 	});
 });
diff --git a/test/checks/tables/td-has-header.js b/test/checks/tables/td-has-header.js
index dc05bc53ee..43147c7f7c 100644
--- a/test/checks/tables/td-has-header.js
+++ b/test/checks/tables/td-has-header.js
@@ -39,7 +39,9 @@ describe('td-has-header', function() {
 			'</table>';
 		axe.testUtils.flatTreeSetup(fixture);
 		var node = fixture.querySelector('table');
-		var result = checks['td-has-header'].evaluate.call(checkContext, node);
+		var result = axe.testUtils
+			.getCheckEvaluate('td-has-header')
+			.call(checkContext, node);
 
 		assert.isFalse(result);
 		assert.equal(checkContext._relatedNodes.length, 4);
@@ -51,7 +53,9 @@ describe('td-has-header', function() {
 
 		axe.testUtils.flatTreeSetup(fixture);
 		var node = fixture.querySelector('table');
-		assert.isTrue(checks['td-has-header'].evaluate.call(checkContext, node));
+		assert.isTrue(
+			axe.testUtils.getCheckEvaluate('td-has-header').call(checkContext, node)
+		);
 	});
 
 	it('should return true each non-empty cell has a column header', function() {
@@ -63,7 +67,9 @@ describe('td-has-header', function() {
 
 		axe.testUtils.flatTreeSetup(fixture);
 		var node = fixture.querySelector('table');
-		assert.isTrue(checks['td-has-header'].evaluate.call(checkContext, node));
+		assert.isTrue(
+			axe.testUtils.getCheckEvaluate('td-has-header').call(checkContext, node)
+		);
 	});
 
 	it('should return true each non-empty cell has aria-label', function() {
@@ -75,7 +81,9 @@ describe('td-has-header', function() {
 
 		axe.testUtils.flatTreeSetup(fixture);
 		var node = fixture.querySelector('table');
-		assert.isTrue(checks['td-has-header'].evaluate.call(checkContext, node));
+		assert.isTrue(
+			axe.testUtils.getCheckEvaluate('td-has-header').call(checkContext, node)
+		);
 	});
 
 	it('should return true each non-empty cell has aria-labelledby', function() {
@@ -88,7 +96,9 @@ describe('td-has-header', function() {
 
 		axe.testUtils.flatTreeSetup(fixture);
 		var node = fixture.querySelector('table');
-		assert.isTrue(checks['td-has-header'].evaluate.call(checkContext, node));
+		assert.isTrue(
+			axe.testUtils.getCheckEvaluate('td-has-header').call(checkContext, node)
+		);
 	});
 
 	it('should return true each non-empty cell has a headers attribute', function() {
@@ -102,7 +112,9 @@ describe('td-has-header', function() {
 
 		axe.testUtils.flatTreeSetup(fixture);
 		var node = fixture.querySelector('table');
-		assert.isTrue(checks['td-has-header'].evaluate.call(checkContext, node));
+		assert.isTrue(
+			axe.testUtils.getCheckEvaluate('td-has-header').call(checkContext, node)
+		);
 	});
 
 	it('should return true there is at least one non-empty header', function() {
@@ -114,7 +126,9 @@ describe('td-has-header', function() {
 
 		axe.testUtils.flatTreeSetup(fixture);
 		var node = fixture.querySelector('table');
-		assert.isTrue(checks['td-has-header'].evaluate.call(checkContext, node));
+		assert.isTrue(
+			axe.testUtils.getCheckEvaluate('td-has-header').call(checkContext, node)
+		);
 	});
 
 	it('should return true if the only data cells are empty', function() {
@@ -123,7 +137,9 @@ describe('td-has-header', function() {
 
 		axe.testUtils.flatTreeSetup(fixture);
 		var node = fixture.querySelector('table');
-		assert.isTrue(checks['td-has-header'].evaluate.call(checkContext, node));
+		assert.isTrue(
+			axe.testUtils.getCheckEvaluate('td-has-header').call(checkContext, node)
+		);
 	});
 
 	it('should return false if a cell has no headers', function() {
@@ -133,7 +149,9 @@ describe('td-has-header', function() {
 		axe.testUtils.flatTreeSetup(fixture);
 		var node = fixture.querySelector('table');
 
-		assert.isFalse(checks['td-has-header'].evaluate.call(checkContext, node));
+		assert.isFalse(
+			axe.testUtils.getCheckEvaluate('td-has-header').call(checkContext, node)
+		);
 		assert.deepEqual(checkContext._relatedNodes, [
 			node.rows[0].cells[0],
 			node.rows[0].cells[1]
@@ -150,7 +168,9 @@ describe('td-has-header', function() {
 		axe.testUtils.flatTreeSetup(fixture);
 		var node = fixture.querySelector('table');
 
-		assert.isFalse(checks['td-has-header'].evaluate.call(checkContext, node));
+		assert.isFalse(
+			axe.testUtils.getCheckEvaluate('td-has-header').call(checkContext, node)
+		);
 		assert.deepEqual(checkContext._relatedNodes, [
 			node.rows[0].cells[0],
 			node.rows[1].cells[0],
@@ -168,7 +188,9 @@ describe('td-has-header', function() {
 		axe.testUtils.flatTreeSetup(fixture);
 		var node = fixture.querySelector('table');
 
-		assert.isTrue(checks['td-has-header'].evaluate.call(checkContext, node));
+		assert.isTrue(
+			axe.testUtils.getCheckEvaluate('td-has-header').call(checkContext, node)
+		);
 	});
 
 	it('should return true if the headers element refers to non-existing elements', function() {
@@ -180,7 +202,9 @@ describe('td-has-header', function() {
 		axe.testUtils.flatTreeSetup(fixture);
 		var node = fixture.querySelector('table');
 
-		assert.isTrue(checks['td-has-header'].evaluate.call(checkContext, node));
+		assert.isTrue(
+			axe.testUtils.getCheckEvaluate('td-has-header').call(checkContext, node)
+		);
 	});
 
 	it('should return false if all headers are empty', function() {
@@ -192,7 +216,9 @@ describe('td-has-header', function() {
 
 		axe.testUtils.flatTreeSetup(fixture);
 		var node = fixture.querySelector('table');
-		assert.isFalse(checks['td-has-header'].evaluate.call(checkContext, node));
+		assert.isFalse(
+			axe.testUtils.getCheckEvaluate('td-has-header').call(checkContext, node)
+		);
 	});
 
 	(shadowSupport ? it : xit)('recognizes shadow tree content', function() {
@@ -208,6 +234,8 @@ describe('td-has-header', function() {
 
 		axe.testUtils.flatTreeSetup(fixture);
 		var node = axe.utils.querySelectorAll(axe._tree, 'table')[0].actualNode;
-		assert.isTrue(checks['td-has-header'].evaluate.call(checkContext, node));
+		assert.isTrue(
+			axe.testUtils.getCheckEvaluate('td-has-header').call(checkContext, node)
+		);
 	});
 });
diff --git a/test/checks/tables/td-headers-attr.js b/test/checks/tables/td-headers-attr.js
index d2a03f7f4b..b974deb583 100644
--- a/test/checks/tables/td-headers-attr.js
+++ b/test/checks/tables/td-headers-attr.js
@@ -17,7 +17,9 @@ describe('td-headers-attr', function() {
 			'</table>';
 
 		var node = fixture.querySelector('table');
-		assert.isTrue(checks['td-headers-attr'].evaluate.call(checkContext, node));
+		assert.isTrue(
+			axe.testUtils.getCheckEvaluate('td-headers-attr').call(checkContext, node)
+		);
 	});
 
 	it('returns true if a valid header is present', function() {
@@ -28,7 +30,9 @@ describe('td-headers-attr', function() {
 			'</table>';
 
 		var node = fixture.querySelector('table');
-		assert.isTrue(checks['td-headers-attr'].evaluate.call(checkContext, node));
+		assert.isTrue(
+			axe.testUtils.getCheckEvaluate('td-headers-attr').call(checkContext, node)
+		);
 	});
 
 	it('returns true if multiple valid headers are present', function() {
@@ -39,7 +43,9 @@ describe('td-headers-attr', function() {
 			'</table>';
 
 		var node = fixture.querySelector('table');
-		assert.isTrue(checks['td-headers-attr'].evaluate.call(checkContext, node));
+		assert.isTrue(
+			axe.testUtils.getCheckEvaluate('td-headers-attr').call(checkContext, node)
+		);
 	});
 
 	it('returns true with an empty header', function() {
@@ -50,7 +56,9 @@ describe('td-headers-attr', function() {
 			'</table>';
 
 		var node = fixture.querySelector('table');
-		assert.isTrue(checks['td-headers-attr'].evaluate.call(checkContext, node));
+		assert.isTrue(
+			axe.testUtils.getCheckEvaluate('td-headers-attr').call(checkContext, node)
+		);
 	});
 
 	it('returns undefined if headers is empty', function() {
@@ -62,7 +70,7 @@ describe('td-headers-attr', function() {
 
 		var node = fixture.querySelector('table');
 		assert.isUndefined(
-			checks['td-headers-attr'].evaluate.call(checkContext, node)
+			axe.testUtils.getCheckEvaluate('td-headers-attr').call(checkContext, node)
 		);
 	});
 
@@ -75,7 +83,9 @@ describe('td-headers-attr', function() {
 			'  <tr> <td headers="h1">goodbye</td> </tr>' +
 			'</table>';
 		node = fixture.querySelector('table');
-		assert.isFalse(checks['td-headers-attr'].evaluate.call(checkContext, node));
+		assert.isFalse(
+			axe.testUtils.getCheckEvaluate('td-headers-attr').call(checkContext, node)
+		);
 
 		fixture.innerHTML =
 			'<span id="hi">hello</span>' +
@@ -84,7 +94,9 @@ describe('td-headers-attr', function() {
 			'  <tr> <td headers="h1">goodbye</td> </tr>' +
 			'</table>';
 		node = fixture.querySelector('table');
-		assert.isFalse(checks['td-headers-attr'].evaluate.call(checkContext, node));
+		assert.isFalse(
+			axe.testUtils.getCheckEvaluate('td-headers-attr').call(checkContext, node)
+		);
 
 		fixture.innerHTML =
 			'<table id="hi">' +
@@ -92,7 +104,9 @@ describe('td-headers-attr', function() {
 			'  <tr> <td headers="h1">goodbye</td> </tr>' +
 			'</table>';
 		node = fixture.querySelector('table');
-		assert.isFalse(checks['td-headers-attr'].evaluate.call(checkContext, node));
+		assert.isFalse(
+			axe.testUtils.getCheckEvaluate('td-headers-attr').call(checkContext, node)
+		);
 	});
 
 	it('returns false if the header refers to the same cell', function() {
@@ -103,6 +117,8 @@ describe('td-headers-attr', function() {
 			'</table>';
 
 		var node = fixture.querySelector('table');
-		assert.isFalse(checks['td-headers-attr'].evaluate.call(checkContext, node));
+		assert.isFalse(
+			axe.testUtils.getCheckEvaluate('td-headers-attr').call(checkContext, node)
+		);
 	});
 });
diff --git a/test/checks/tables/th-has-data-cells.js b/test/checks/tables/th-has-data-cells.js
index 847c9ab1e8..b5debb8609 100644
--- a/test/checks/tables/th-has-data-cells.js
+++ b/test/checks/tables/th-has-data-cells.js
@@ -20,7 +20,9 @@ describe('th-has-data-cells', function() {
 		axe.testUtils.flatTreeSetup(fixture);
 		var node = fixture.querySelector('table');
 		assert.isTrue(
-			checks['th-has-data-cells'].evaluate.call(checkContext, node)
+			axe.testUtils
+				.getCheckEvaluate('th-has-data-cells')
+				.call(checkContext, node)
 		);
 	});
 
@@ -34,7 +36,9 @@ describe('th-has-data-cells', function() {
 		axe.testUtils.flatTreeSetup(fixture);
 		var node = fixture.querySelector('table');
 		assert.isTrue(
-			checks['th-has-data-cells'].evaluate.call(checkContext, node)
+			axe.testUtils
+				.getCheckEvaluate('th-has-data-cells')
+				.call(checkContext, node)
 		);
 	});
 
@@ -48,7 +52,9 @@ describe('th-has-data-cells', function() {
 		axe.testUtils.flatTreeSetup(fixture);
 		var node = fixture.querySelector('table');
 		assert.isTrue(
-			checks['th-has-data-cells'].evaluate.call(checkContext, node)
+			axe.testUtils
+				.getCheckEvaluate('th-has-data-cells')
+				.call(checkContext, node)
 		);
 	});
 
@@ -62,7 +68,9 @@ describe('th-has-data-cells', function() {
 		axe.testUtils.flatTreeSetup(fixture);
 		var node = fixture.querySelector('table');
 		assert.isTrue(
-			checks['th-has-data-cells'].evaluate.call(checkContext, node)
+			axe.testUtils
+				.getCheckEvaluate('th-has-data-cells')
+				.call(checkContext, node)
 		);
 	});
 
@@ -75,7 +83,9 @@ describe('th-has-data-cells', function() {
 		axe.testUtils.flatTreeSetup(fixture);
 		var node = fixture.querySelector('table');
 		assert.isTrue(
-			checks['th-has-data-cells'].evaluate.call(checkContext, node)
+			axe.testUtils
+				.getCheckEvaluate('th-has-data-cells')
+				.call(checkContext, node)
 		);
 	});
 
@@ -94,7 +104,9 @@ describe('th-has-data-cells', function() {
 		axe.testUtils.flatTreeSetup(fixture);
 		var node = fixture.querySelector('table');
 		assert.isTrue(
-			checks['th-has-data-cells'].evaluate.call(checkContext, node)
+			axe.testUtils
+				.getCheckEvaluate('th-has-data-cells')
+				.call(checkContext, node)
 		);
 	});
 
@@ -108,7 +120,9 @@ describe('th-has-data-cells', function() {
 		axe.testUtils.flatTreeSetup(fixture);
 		var node = fixture.querySelector('table');
 		assert.isUndefined(
-			checks['th-has-data-cells'].evaluate.call(checkContext, node)
+			axe.testUtils
+				.getCheckEvaluate('th-has-data-cells')
+				.call(checkContext, node)
 		);
 	});
 
@@ -122,7 +136,9 @@ describe('th-has-data-cells', function() {
 		axe.testUtils.flatTreeSetup(fixture);
 		var node = fixture.querySelector('table');
 		assert.isTrue(
-			checks['th-has-data-cells'].evaluate.call(checkContext, node)
+			axe.testUtils
+				.getCheckEvaluate('th-has-data-cells')
+				.call(checkContext, node)
 		);
 	});
 
@@ -135,7 +151,9 @@ describe('th-has-data-cells', function() {
 		axe.testUtils.flatTreeSetup(fixture);
 		var node = fixture.querySelector('table');
 		assert.isUndefined(
-			checks['th-has-data-cells'].evaluate.call(checkContext, node)
+			axe.testUtils
+				.getCheckEvaluate('th-has-data-cells')
+				.call(checkContext, node)
 		);
 	});
 
@@ -155,7 +173,9 @@ describe('th-has-data-cells', function() {
 		axe.testUtils.flatTreeSetup(fixture);
 		var node = fixture.querySelector('table');
 		assert.isUndefined(
-			checks['th-has-data-cells'].evaluate.call(checkContext, node)
+			axe.testUtils
+				.getCheckEvaluate('th-has-data-cells')
+				.call(checkContext, node)
 		);
 	});
 
@@ -173,7 +193,9 @@ describe('th-has-data-cells', function() {
 		axe.testUtils.flatTreeSetup(fixture);
 		var node = axe.utils.querySelectorAll(axe._tree, 'table')[0].actualNode;
 		assert.isTrue(
-			checks['th-has-data-cells'].evaluate.call(checkContext, node)
+			axe.testUtils
+				.getCheckEvaluate('th-has-data-cells')
+				.call(checkContext, node)
 		);
 	});
 });
diff --git a/test/checks/visibility/hidden-content.js b/test/checks/visibility/hidden-content.js
index 95c356aa3e..5b417fd965 100644
--- a/test/checks/visibility/hidden-content.js
+++ b/test/checks/visibility/hidden-content.js
@@ -18,7 +18,9 @@ describe('hidden content', function() {
 			'<div id="target" style="display: none;"><p>Some paragraph text.</p></div>'
 		);
 		assert.isUndefined(
-			checks['hidden-content'].evaluate.apply(checkContext, params)
+			axe.testUtils
+				.getCheckEvaluate('hidden-content')
+				.apply(checkContext, params)
 		);
 	});
 
@@ -27,7 +29,9 @@ describe('hidden content', function() {
 			'<div id="target" style="visibility: hidden;"><p>Some paragraph text.</p></div>'
 		);
 		assert.isUndefined(
-			checks['hidden-content'].evaluate.apply(checkContext, params)
+			axe.testUtils
+				.getCheckEvaluate('hidden-content')
+				.apply(checkContext, params)
 		);
 	});
 
@@ -36,7 +40,9 @@ describe('hidden content', function() {
 			'<div style="visibility: hidden;"><p id="target" style="visibility: hidden;">Some paragraph text.</p></div>'
 		);
 		assert.isTrue(
-			checks['hidden-content'].evaluate.apply(checkContext, params)
+			axe.testUtils
+				.getCheckEvaluate('hidden-content')
+				.apply(checkContext, params)
 		);
 	});
 
@@ -45,7 +51,9 @@ describe('hidden content', function() {
 			'<span id="target" class="icon" aria-hidden="true"></span>'
 		);
 		assert.isTrue(
-			checks['hidden-content'].evaluate.apply(checkContext, params)
+			axe.testUtils
+				.getCheckEvaluate('hidden-content')
+				.apply(checkContext, params)
 		);
 	});
 
@@ -54,7 +62,11 @@ describe('hidden content', function() {
 		axe.testUtils.flatTreeSetup(document.documentElement);
 		var virtualNode = axe.utils.getNodeFromTree(node);
 		assert.isTrue(
-			checks['hidden-content'].evaluate(node, undefined, virtualNode)
+			axe.testUtils.getCheckEvaluate('hidden-content')(
+				node,
+				undefined,
+				virtualNode
+			)
 		);
 	});
 
@@ -70,19 +82,31 @@ describe('hidden content', function() {
 		var shadow = document.querySelector('#shadow');
 		var virtualShadow = axe.utils.getNodeFromTree(shadow);
 		assert.isTrue(
-			checks['hidden-content'].evaluate(shadow, undefined, virtualShadow)
+			axe.testUtils.getCheckEvaluate('hidden-content')(
+				shadow,
+				undefined,
+				virtualShadow
+			)
 		);
 
 		var target = shadowRoot.querySelector('#target');
 		var virtualTarget = axe.utils.getNodeFromTree(target);
 		assert.isUndefined(
-			checks['hidden-content'].evaluate(target, undefined, virtualTarget)
+			axe.testUtils.getCheckEvaluate('hidden-content')(
+				target,
+				undefined,
+				virtualTarget
+			)
 		);
 
 		var content = document.querySelector('#content');
 		var virtualContent = axe.utils.getNodeFromTree(content);
 		assert.isTrue(
-			checks['hidden-content'].evaluate(content, undefined, virtualContent)
+			axe.testUtils.getCheckEvaluate('hidden-content')(
+				content,
+				undefined,
+				virtualContent
+			)
 		);
 	});
 });
diff --git a/test/core/base/audit.js b/test/core/base/audit.js
index 4803bc640d..19ed2e66de 100644
--- a/test/core/base/audit.js
+++ b/test/core/base/audit.js
@@ -377,10 +377,10 @@ describe('Audit', function() {
 			assert.equal(audit.checks.target, undefined);
 			audit.addCheck({
 				id: 'target',
-				options: 'jane'
+				options: { value: 'jane' }
 			});
 			assert.ok(audit.checks.target);
-			assert.equal(audit.checks.target.options, 'jane');
+			assert.deepEqual(audit.checks.target.options, { value: 'jane' });
 			audit.resetRulesAndChecks();
 			assert.equal(audit.checks.target, undefined);
 		});
@@ -402,10 +402,10 @@ describe('Audit', function() {
 			assert.equal(audit.checks.target, undefined);
 			audit.addCheck({
 				id: 'target',
-				options: 'jane'
+				options: { value: 'jane' }
 			});
 			assert.ok(audit.checks.target);
-			assert.equal(audit.checks.target.options, 'jane');
+			assert.deepEqual(audit.checks.target.options, { value: 'jane' });
 		});
 		it('should configure the metadata, if passed', function() {
 			var audit = new Audit();
@@ -423,18 +423,18 @@ describe('Audit', function() {
 			audit.addCheck({
 				id: 'target',
 				evaluate: myTest,
-				options: 'jane'
+				options: { value: 'jane' }
 			});
 
-			assert.equal(audit.checks.target.options, 'jane');
+			assert.deepEqual(audit.checks.target.options, { value: 'jane' });
 
 			audit.addCheck({
 				id: 'target',
-				options: 'fred'
+				options: { value: 'fred' }
 			});
 
 			assert.equal(audit.checks.target.evaluate, myTest);
-			assert.equal(audit.checks.target.options, 'fred');
+			assert.deepEqual(audit.checks.target.options, { value: 'fred' });
 		});
 		it('should not turn messages into a function', function() {
 			var audit = new Audit();
diff --git a/test/core/base/check.js b/test/core/base/check.js
index 75cb5aa92c..2a9dd744cc 100644
--- a/test/core/base/check.js
+++ b/test/core/base/check.js
@@ -38,8 +38,8 @@ describe('Check', function() {
 				var check = new Check({
 					options: ['foo']
 				});
-				check.configure({ options: 'fong' });
-				assert.equal('fong', check.test());
+				check.configure({ options: { value: 'fong' } });
+				assert.deepEqual({ value: 'fong' }, check.test());
 				delete Check.prototype.test;
 			});
 			it('should override evaluate', function() {
@@ -170,6 +170,15 @@ describe('Check', function() {
 				}).run(fixture, { options: expected }, {}, noop);
 			});
 
+			it('should normalize non-object options', function(done) {
+				new Check({
+					evaluate: function(node, options) {
+						assert.deepEqual(options, { value: 'foo' });
+						done();
+					}
+				}).run(fixture, { options: 'foo' }, {}, noop);
+			});
+
 			it('should pass the context through to check evaluate call', function(done) {
 				var configured = {
 					cssom: 'yay',
@@ -323,6 +332,15 @@ describe('Check', function() {
 				}).runSync(fixture, { options: expected }, {});
 			});
 
+			it('should normalize non-object options', function(done) {
+				new Check({
+					evaluate: function(node, options) {
+						assert.deepEqual(options, { value: 'foo' });
+						done();
+					}
+				}).run(fixture, { options: 'foo' }, {}, noop);
+			});
+
 			it('should pass the context through to check evaluate call', function() {
 				var configured = {
 					cssom: 'yay',
@@ -413,6 +431,36 @@ describe('Check', function() {
 				}
 			});
 		});
+
+		describe('getOptions', function() {
+			var check;
+			beforeEach(function() {
+				check = new Check({
+					options: {
+						foo: 'bar'
+					}
+				});
+			});
+
+			it('should return default check options', function() {
+				assert.deepEqual(check.getOptions(), { foo: 'bar' });
+			});
+
+			it('should merge options with Check defaults', function() {
+				var options = check.getOptions({ hello: 'world' });
+				assert.deepEqual(options, { foo: 'bar', hello: 'world' });
+			});
+
+			it('should override defaults', function() {
+				var options = check.getOptions({ foo: 'world' });
+				assert.deepEqual(options, { foo: 'world' });
+			});
+
+			it('should normalize passed in options', function() {
+				var options = check.getOptions('world');
+				assert.deepEqual(options, { foo: 'bar', value: 'world' });
+			});
+		});
 	});
 
 	describe('spec object', function() {
@@ -455,7 +503,7 @@ describe('Check', function() {
 		describe('.options', function() {
 			it('should be set', function() {
 				var spec = {
-					options: ['monkeys', 'bananas']
+					options: { value: ['monkeys', 'bananas'] }
 				};
 				assert.equal(new Check(spec).options, spec.options);
 			});
@@ -464,6 +512,13 @@ describe('Check', function() {
 				var spec = {};
 				assert.equal(new Check(spec).options, spec.options);
 			});
+
+			it('should normalize non-object options', function() {
+				var spec = {
+					options: 'foo'
+				};
+				assert.deepEqual(new Check(spec).options, { value: 'foo' });
+			});
 		});
 
 		describe('.evaluate', function() {
diff --git a/test/core/public/configure.js b/test/core/public/configure.js
index c375aca01a..7e7ecbf1c9 100644
--- a/test/core/public/configure.js
+++ b/test/core/public/configure.js
@@ -146,7 +146,7 @@ describe('axe.configure', function() {
 			checks: [
 				{
 					id: 'bob',
-					options: true,
+					options: { value: true },
 					metadata: {
 						joe: 'joe'
 					}
@@ -156,7 +156,7 @@ describe('axe.configure', function() {
 
 		// assert.instanceOf(axe._audit.checks.bob, Check);
 		assert.equal(axe._audit.checks.bob.id, 'bob');
-		assert.isTrue(axe._audit.checks.bob.options);
+		assert.isTrue(axe._audit.checks.bob.options.value);
 		assert.equal(axe._audit.data.checks.bob.joe, 'joe');
 	});
 
@@ -170,7 +170,7 @@ describe('axe.configure', function() {
 			checks: [
 				{
 					id: 'bob',
-					options: false
+					options: { value: false }
 				}
 			]
 		});
@@ -178,7 +178,7 @@ describe('axe.configure', function() {
 			checks: [
 				{
 					id: 'bob',
-					options: true,
+					options: { value: true },
 					metadata: {
 						joe: 'joe'
 					}
@@ -188,7 +188,7 @@ describe('axe.configure', function() {
 
 		// assert.instanceOf(axe._audit.checks.bob, Check);
 		assert.equal(axe._audit.checks.bob.id, 'bob');
-		assert.isTrue(axe._audit.checks.bob.options);
+		assert.isTrue(axe._audit.checks.bob.options.value);
 		assert.equal(axe._audit.data.checks.bob.joe, 'joe');
 	});
 
diff --git a/test/testutils.js b/test/testutils.js
index 76900897e2..f5776c4d08 100644
--- a/test/testutils.js
+++ b/test/testutils.js
@@ -1,4 +1,4 @@
-/* global axe */
+/* global axe, checks */
 
 // Let the user know they need to disable their axe/attest extension before running the tests.
 if (window.__AXE_EXTENSION__) {
@@ -370,6 +370,19 @@ testUtils.queryFixture = function queryFixture(html, query) {
 	return axe.utils.querySelectorAll(axe._tree, query || '#target')[0];
 };
 
+/**
+ * Return the checks evaluate method and apply default options
+ * @param {String} checkId - ID of the check
+ * @return Function
+ */
+testUtils.getCheckEvaluate = function getCheckEvaluate(checkId) {
+	var check = checks[checkId];
+	return function evaluateWrapper(node, options, virtualNode, context) {
+		var opts = check.getOptions(options);
+		return check.evaluate.call(this, node, opts, virtualNode, context);
+	};
+};
+
 /**
  * Test function for detecting IE11 user agent string
  *