Đang chuẩn bị nút TẢI XUỐNG, xin hãy chờ
Tải xuống
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. | 13.4 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 13.63. Listing 13.63 Naive success callback to the poller function connect if this.url throw new TypeError Provide client URL if this.poller this.poller ajax.poll this.url success function xhr this.dispatch JSON.parse xhr.responseText .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 e.g. json2.js from json.org 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 13.64 runs Listing 13.64 Expecting badly formed data not to be dispatched test should not dispatch badly formed data function this.client.url my url this.client.dispatch stubFn this.client.connect Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark. From the Library of WoweBook.Com 334 Streaming Data with Ajax and Comet this.xhr.complete 200 OK assertFalse this.client.dispatch.called 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. 13.4.5.1 Separating .