Skip to content

Instantly share code, notes, and snippets.

@randombits
Created January 3, 2012 02:19
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save randombits/1553139 to your computer and use it in GitHub Desktop.
Save randombits/1553139 to your computer and use it in GitHub Desktop.
Overrides for mock objects/functions in JavaScript based QUnit Unit Tests.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Test overrides</title>
<!-- Load jQuery and QUnit dependencies -->
<link rel="stylesheet" href="http://code.jquery.com/qunit/git/qunit.css" type="text/css" media="screen"/>
<script type="text/javascript" src="http://code.jquery.com/jquery-latest.js"></script>
<script type="text/javascript" src="http://code.jquery.com/qunit/git/qunit.js"></script>
<!-- Load the auto-generated unit-tests.js -->
<script type="text/javascript" src="unit-tests.js"></script>
<!-- Run the Unit Tests -->
<script type="text/javascript">
//--------------------------------------------------------------------------------------------------------------
// Constructor for overrides.
function overrides(overrides) {
var _overrides = {};
for (var name in overrides) {
if (typeof name == "string") {
var keys = name.split('.');
var object = window;
for (var i = 0; i < (keys.length - 1); ++i) {
object = object[keys[i]];
if (!object) break;
}
if (object) {
var key = keys[i];
_overrides[name] = {
"object": object,
"key": key,
"value": object[key],
"override": overrides[name]
};
}
}
}
this.overrides = _overrides;
}
// Implementation for overrides.
overrides.prototype = {
set: function () {
for (var key in this.overrides) {
var override = this.overrides[key];
override.object[override.key] = override.override;
}
},
reset: function () {
for (var key in this.overrides) {
var override = this.overrides[key];
override.object[override.key] = override.value;
}
}
}
// Helper function for testing overrides
function _true() {
return true;
}
// Helper function for testing overrides
function _false() {
return false;
}
//--------------------------------------------------------------------------------------------------------------
// Run the Unit Tests after the document has finished loading.
$(document).ready(function () {
test("Overrides", 7, function () {
var numOverridesCalled = 0;
var _overrides = new overrides({
"_true": function () { ++numOverridesCalled; return false; },
"_false": function () { ++numOverridesCalled; return true; }
});
// Check original functions.
strictEqual(_true(), true, "Original _true() is expected to return true.");
strictEqual(_false(), false, "Original _false() is expected to return false.");
// Check overrides.
_overrides.set();
strictEqual(_true(), false, "Overridden _true() is expected to return false.");
strictEqual(_false(), true, "Overridden _false() is expected to return true.");
// Re-check original functions.
_overrides.reset();
strictEqual(_true(), true, "Original _true() is expected to return true.");
strictEqual(_false(), false, "Original _false() is expected to return false.");
// Veify overrides were actually called.
strictEqual(numOverridesCalled, 2, "Verify numver of overrides called.");
});
});
</script>
</head>
<body>
<h1 id="qunit-header">
Test overrides</h1>
<h2 id="qunit-banner">
</h2>
<div id="qunit-testrunner-toolbar">
</div>
<h2 id="qunit-userAgent">
</h2>
<ol id="qunit-tests">
</ol>
<div id="qunit-fixture">
</div>
</body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment