3

I am trying to figure out how to test this javascript function aduequately using qunit and mockjax

My javascript is set up with the revealing module pattern, im new to unit testing so this is kind of driving me up a wall

my.someMethod = function (someId, completedHandler) {
        $.ajax({
            dataType: "json",
            url: my.someUrl,
            traditional: true,
            data: {
                someId : someId
            },
            success: function () {

                if (completedHandler !== undefined) {
                    completedHandler();
                }
            }
        });
    };

Like i want to test if the correct url is being used, if the id being passed in is the right one, making sure the ajax is being called etc.

Philip Loyer
  • 738
  • 2
  • 7
  • 22

1 Answers1

2

How about that, figured it out myself finally.

Structure it somethng like so

In your javascript method

my.someMethod = function (someId, completedHandler) {
        $.ajax({
            dataType: "json",
            url: my.someUrl,
            traditional: true,
            data: {
                someId : someId
            },
            success: function (data) {

                if (completedHandler !== undefined) {
                    completedHandler(someId, my.someUrl, data.testResult);
                }
            }
        });
    };

Set up your mockjax

$.mockjax({
            url: "someActualUrl",
            dataType: 'json',
            responseText:
                {
                    testResult: 'AJAX Called'                           
                }
        });

And in your actual qunit test

test("someMethod calls ajax", function () {

        namespace.someMethod("id1",
            function (someId, someUrl, someTestResult) {
                test("someMethod ajax test", function () {

                    assert.strictEqual(someId, "id1");
                    assert.strictEqual(someUrl, "someActualUrl");
                    assert.strictEqual(someTestResult, "AJAX Called");
            });

        start();
    });

    ok(true, "Ajax Called");
});
Philip Loyer
  • 738
  • 2
  • 7
  • 22