Just use sync: true in all tests and put an end to this discussion :)

On Oct 22, 9:26 pm, gMinuses <gminu...@gmail.com> wrote:
> I'd like to test the following code to make sure:
>
> 1. setTimeout calls the function
> 2. ajax success callback is called
>
> setTimeout(function() {
>
>         $.ajax({
>                 url: './index.html',
>                 success: function() {}
>         })
>
> }, 100);
>
> If I only have one nested asynchronous test like this, it works:
>
> asyncTest('asyncTest', function() {
>         setTimeout(function() {
>                 console.log(1);
>                 ok(true, 'success');
>                 start();
>
>                 asyncTest('nested asyncTest', function() {
>                         $.ajax({
>                                 url: './index.html',
>                                 success: function() {
>                                         console.log(2);
>                                         ok(true, 'ajax success');
>                                         start();
>                                 }
>                         })
>                 })
>
>         }, 100)
>
> })
>
> But if there are multiple tests, it works, but run out of order:
>
> asyncTest('asyncTest', function() {
>         setTimeout(function() {
>                 console.log(1);
>                 ok(true, 'success');
>                 start();
>
>                 asyncTest('nested asyncTest', function() {
>                         $.ajax({
>                                 url: './index.html',
>                                 success: function() {
>                                         console.log(2);
>                                         ok(true, 'ajax success');
>                                         start();
>                                 }
>                         })
>                 })
>
>         }, 100)
>
> })
>
> asyncTest('another asyncTest', function() {
>         setTimeout(function() {
>                 console.log(3);
>                 ok(true, 'another success');
>                 start();
>
>                 asyncTest('another nested asyncTest', function() {
>                         $.ajax({
>                                 url: './index.html',
>                                 success: function() {
>                                         console.log(4);
>                                         ok(true, 'another ajax success');
>                                         start();
>                                 }
>                         })
>                 })
>
>         }, 100)
>
> })
>
> If you open firebug, you can see the order is "1,3,2,4", which can
> cause disasters.
>
> The real world problem is that I use setInterval to periodically check
> location.hash to implement a cross-browser "onhashchange" event, and I
> bind a function to this event, when the function gets called, it will
> make an ajax call. I set a different value to location.hash in every
> test to trigger the event, which is actually asynchronous. So how do I
> use qunit to test this code?
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"jQuery Development" group.
To post to this group, send email to jquery-dev@googlegroups.com
To unsubscribe from this group, send email to 
jquery-dev+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/jquery-dev?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to