On Mon, Dec 20, 2010 at 3:43 PM, Peter Higgins <da...@dojotoolkit.org>wrote:
> We have a "build system" we use for production code. In many of the places > we have this same situation we use "build pragmas" to ensure the exposed > reference is removed in production. eg: > > myns.module = (function(){ > > var internal = true, otherinteral = {}; > > //>>excludeStart("debugging", true); > myns.exported = internal; > myns.exported2 = otherinternal; > //>>excludeEnd("debugging"); > > // or whatever > return { > foo: function(){ > return !!internal > } > } > > })() > > Then the unit tests check against the intentionally/temporarily exposed > public members, though they are removed after being processed. nothing in > the module actually uses the myns.exported* stuff. > > The pattern matching exists I know in Dojo and RequireJS builder tools, > just regexp based so should be easy to replicate in any deploy process you > have. > > hth > > ~phiggins > > > > On 12/20/10 9:28 AM, Michael Allan wrote: > >> Hi All, >> >> We're trying to improve our processes and overall code quality at work by >> using TDD for all new Javascript code, while simultaneously retrofitting >> tests to our existing js codebase. We use a single global variable as a >> namespace within which multiple sub-modules are defined, mostly following >> the Revealing Module Pattern. >> >> The problem we've struck is that the private helper functions within each >> module can't be accessed from outside the closure for unit testing. We could >> of course rely solely on our end-to-end tests to ensure correct behaviour, >> but we're striving for more comprehensive coverage than that. Alternatively >> we could expose all of these helper methods so that they can be properly >> tested, however that defeats one of the primary benefits the pattern, namely >> encapsulation. I'm loathe to do sacrifice one benefit for the other, and >> ideally want both. >> >> The only other alternative I can think of is to modify the files at build >> time, perhaps exposing the private methods via a temporary test API object >> or by removing the outer containing function which constrains their scope. >> Of course, that would mean that we'd then be releasing a version of our code >> different from the one we'd tested ... which sort of defeats the purpose. >> >> Any thoughts or experiences you have to share would be greatly >> appreciated. I'm a relative novice at TDD, so don't hesitate to mention >> anything you think seems obvious. Likewise, I'm only a third of the way >> through Christain Johansen's excellent book ... so feel free to tell me to >> at least finish that before asking such things, if appropriate ;-) >> >> Cheers, >> Mike >> >> Heh, incidentally, I released a simple proof of concept for such pragma's over the weekend. It's completely library agnostic but it's not exactly a complete package :) But maybe it helps. See http://pcd.qfox.nl I guess I should add a simple textarea so you can try for yourself. I'll do that later tonight :) - peter -- To view archived discussions from the original JSMentors Mailman list: http://www.mail-archive.com/jsmentors@jsmentors.com/ To search via a non-Google archive, visit here: http://www.mail-archive.com/jsmentors@googlegroups.com/ To unsubscribe from this group, send email to jsmentors+unsubscr...@googlegroups.com