JSFiddle - React, Tailwind, and code Playground

by BrianGenisio

JavaScript

function Mocker() {
    this.originalFunctions = {};

    function getFunction(obj, functionName) {
        var tokens = functionName.split(".");
        if (tokens.length === 0 || tokens[0] === "") {
            return obj;
        } else if (tokens.length == 1) {
            return obj[tokens[0]];
        } else {
            return getFunction(obj[tokens.shift()], tokens.join("."));
        }
    }

    function setFunction(obj, functionName, value) {
        var tokens = functionName.split(".");
        if (tokens.length === 0 || tokens[0] === "") {
            return;
        } else if (tokens.length == 1) {
            obj[tokens[0]] = value;
        } else {
            setFunction(obj[tokens.shift()], tokens.join("."), value);
        }
    }

    this.backup = function() {
        for (var i = 0; i < arguments.length; i++) {
            var functionName = arguments[i];
            this.originalFunctions[functionName] = getFunction(window, functionName);
        }
    };

    this.restore = function() {
        for (var i = 0; i < arguments.length; i++) {
            var functionName = arguments[i];
            setFunction(window, functionName, this.originalFunctions[functionName]);
        }
    };
}

mocker = new Mocker();

console.log(Math.random());
mocker.setup("Math.random");
Math.random = function() {
    return 5;
};
console.log(Math.random());
mocker.teardown("Math.random");
console.log(Math.random());