JSFiddle - React, Tailwind, and code Playground

HTML

<script src="https://raw.github.com/bitzesty/qunit-mock/master/lib/qunit.mock.js"></script>
<script src="http://code.jquery.com/qunit/qunit-1.12.0.js"></script>
<link rel="stylesheet" href="http://code.jquery.com/qunit/qunit-1.12.0.css">
<h1 id="qunit-header">Unit Tests</h1>


<h2 id="qunit-banner"></h2>

<div id="qunit-testrunner-toolbar"></div>
<ol id="qunit-tests"></ol>
<div id="qunit-fixture">
    <div id="1" class="one two three"></div>
    <div id="2" class="one one"></div>
    <div id="3">
        <div class="marry had a little lamb"></div>
        <div class="whose fleece was white as snow">
            <div class="and everywhere that mary went"></div>
        </div>
    </div>
    <div id="4" class="one two three four five six seven eight nine ten"></div>
</div>

JavaScript

;!(function ($) {
    $.fn.classes = function (callback) {
        var classes = [];
        $.each(this, function (i, v) {
            var splitClassName = v.className.split(/\s+/);
            for (var j in splitClassName) {
                var className = splitClassName[j];
                if (-1 === classes.indexOf(className)) {
                    classes.push(className);
                }
            }
        });
        if ('function' === typeof callback) {
            for (var i in classes) {
                callback(classes[i]);
            }
        }
        return classes;
    };
})(jQuery);

module('jQuery.classes');

// helper function to check array equality.
// elements in the arrays need not be in order
var arrayEqual = function(result, expected) {
    $.each(expected, function(i, v) {
        ok(result.indexOf(v) !== -1, 'the result array should contain each of the expected values'); 
    });
    equal(result.length, expected.length);
};

test('should return the classes of a simple div', function() {
    var expected = ['one', 'two', 'three'];
    var result = $('#1').classes(); 
    arrayEqual(result, expected);
});

test('should return the classes in order', function() {
    var expected = 'one two three'.split(' ');
    var result = $('#1').classes();
    deepEqual(result, expected);
});

test('should not return duplicate classes', function() {
    var expected = ['one'];
    var result = $('#2').classes(); 
    deepEqual(result, expected);
});

test('should work as expected if used on a selector that matches multiple elements', function() {
    var expected = 'marry had a little lamb whose fleece was white as snow'.split(' ');
    var result = $('#3 > div').classes();
    arrayEqual(result, expected);
});

// I'm having trouble getting [quni-mock](https://github.com/bitzesty/qunit-mock) working
// so the callback is untested