I’ve recently started using JSDOM for testing my client-side code. While I’ve been very impressed with how simple it is to set up, and how fast it is, there has been one major obstacle which I didn’t see documented anywhere else: it doesn’t actually lay out the HTML elements.
In other words, JSDOM supports creating the in-memory structure of the web page, even running JavaScript code and altering CSS attributes. However, it doesn’t actually assign the height
, width
, or other such attributes to the elements. They are perpetually all zero.
Despite this, you can do a lot of rigorous testing, and in a way which is completely identical to how your might set up server-side tests. In fact, I use exactly the same project & test set-up for testing both my regular Node.js modules as I do for the client-side ones. All you need is a little bit of pre-test set-up code to construct the JSDOM window and load a test page, and you’re ready to go.
However, if you want to write tests which verify the layout of things, you’ll need to use another solution.