TAILIEUCHUNG - Test Driven JavaScript Development- P18

Test Driven JavaScript Development- P18:This book is about programming JavaScript for the real world, using the techniques and workflow suggested by Test-Driven Development. It is about gaining confidence in your code through test coverage, and gaining the ability to fearlessly refactor and organically evolve your code base. It is about writing modular and testable code. It is about writing JavaScript that works in a wide variety of environments and that doesn’t get in your user’s way. | The Comet Client 333 The test fails as dispatch was not called. To fix this we need to parse the responseText as JSON and call the method from within the success callback of the request. A very naive implementation can be seen in Listing . Listing Naive success callback to the poller function connect if throw new TypeError Provide client URL if success function xhr .bind this At this point I am expecting this test to still fail in at least a few browsers. As we discussed in Chapter 8 ECMAScript 5th Edition EcmaScript5 specifies a JSON object. However it is not yet widely implemented least of all in older browsers such as Internet Explorer 6. Still the tests pass. What s happening is that JsTestDriver is already using Douglas Crockford s JSON parser internally and because it does not namespace its dependencies in the test runner our test accidentally works because the environment loads our dependencies for us. Hopefully this issue with JsTest-Driver will be worked out but until then we need to keep this in the back of our heads. The proper solution is of course to add . from in lib . I mentioned that the above implementation was naive. A successful response from the server does not imply valid JSON. What do you suppose happens when the test in Listing runs Listing Expecting badly formed data not to be dispatched test should not dispatch badly formed data function my url stubFn Please purchase PDF Split-Merge on to remove this watermark. From the Library of 334 Streaming Data with Ajax and Comet 200 OK assertFalse Furthermore if we expect the server to return JSON data it would probably be a good idea to indicate as much by sending the right Accept header with the request. Separating .