[TIP] ANN: Nose Plugin to run JavaScript tests

Guido Wesdorp johnny at johnnydebris.net
Mon Feb 16 04:40:04 PST 2009


Kumar McMillan wrote:
> It's still experimental so if anyone has a suite of JavaScript tests
> please let me know if it works or not.  There is some support for
> JavaScript libraries that are tied to the DOM of a browser.
>
>   
Hm, I'm working on a somewhat similar application at the moment, 
although a bit more involved, perhaps it makes sense to join forces somehow?

The idea is this: I'm using python-spidermonkey to build up a web 
browser environment (window basically) using a combination of pure JS 
libs (e.g. a DOM l. 2 lib) and Python libs (e.g. lxml for xpath and 
xslt). Currently I have support for XMLHttpRequest, XPath, XSLT and of 
course basic DOM l. 2 (mostly complete) and l. 0 (incomplete, but 
usable). In the future, I hope to be able to provide at least one, but 
perhaps more, complete browser APIs to test against...

A small example (taken from the unit tests):

b = browser.Browser(
    build_server(
        {'/': '''\
<html>
  <head>
    <title>test page</title>
  </head>
  <body onload="window.foo = 1">
    foo
  </body>
</html>'''}))
b.initialize()
assert b.eval('window.foo') == 1

As you can see, you can instantiate a Browser object (should be named 
BrowserWindow I guess), and pass in some server object (a simple object 
that implements a single method to load resources from the (virtual?) 
server), then call 'initialize' to have the HTML loaded and parsed, and 
the onload called. After this, you can call the 'eval' method to 
evaluate JavaScript code in the environment.

Currently it's still somewhat rudimentary, although already I use it for 
testing a rather complex application built using the YUI libs.

I hope I can build a small community to help me complete this, as you 
may understand it will not be a small task to implement full browser 
APIs, for instance implementing event handling etc. is quite involved...

Anyway, if you're interested in the application, check  out

http://johnnydebris.net/svn/projects/browser

If you're interested in helping out, even better! In that case drop me a 
line...

Cheers,

Guido

P.S. For a simpler solution, which resembles your idea but then 
implemented using SpiderMonkey and py.test, see 
http://johnnydebris.net/svn/projects/jsbase (the conftest in the 
directory can be used for your own project, the unit tests eat their own 
dogfood).



More information about the testing-in-python mailing list