Search code examples
jquerymockingqunit

Qunit Assert mockajax response


To test the Jquery Ajax reponse, I am using mock ajax with Qunit. I have to assert the Mock Ajax reponse, but in my test case,Assert statements are running first and then i am getting response from Mock ajax.

How to make sure that mock ajax response is available before calling assert statements in Qunit


Solution

  • You'll need to do an asyncTest versus a simple test call. Here's an example from one I use:

    ...
    asyncTest("test title", function() {
      $.mockjaxClear(); // clear any existing mock jax entries (could be in a setup method)
      $.mockjax({ // pass in your request matcher / response object
        url: '/some/file.php',
        type: 'post',
        status: 200,
        dataType: 'json',
        response: function(req) {
          this.responseText = JSON.stringify({some: "data"});
        }
      });
    
      $.ajax({
        url: '/some/file.php',
        type: 'post',
        dataType: 'json',
        success: function(d) {
          a.deepEqual(d, {some: "data"}, "Object data is correct in callback");
    
          // other tests
    
          start(); // this tells QUnit to start back up, async is done
      });
      ...
    });
    

    And some documentation of Async control in QUnit.