Of course, the goal in this is to split apart the code that's doing back-end processing (e.g. firing/requesting new DOM data via
XmlHttpRequest) versus interacting with events that the user is doing. You can thus test individual parts separately -- the view isn't easily testable (thus, you have to do it manually) but you can check that the events are being fired appropriately at the right places, and that the controller is returning the right data.
There are asynchronous issues that can play in AJAX though; and it's possible to get race conditions fairly easily. It's somewhat more difficult to get a decent test harness that will test various asynchronous testing; but then again, testing asynchronous code in a multi-threaded language like Java is actually fairly hairy too.