This may be obvious to everyone else but I didn't find it by searching, so posting both the question and one possible answer here.
Background:
- Custom JQuery UI widget using widget factory
- In the widget, some elements get hidden or shown based on other data/options.
- Creating unit tests to verify they are being shown/hidden correctly.
- I thought that my unit tests could each create their own element in memory, similar to this old answer.
Stripped out the actual widget part from this example:
test( 'show/hide', 1, function() {
var somecondition = true;
var div = $( '<div/>' ).hide();
if (somecondition) div.show();
equal( somecondition, div.is( ":visible" ) );
});
The test fails because jQuery always reports div.is( ":visible" )
as false. I thought that using div.css('display') == 'none'
would be a workaround. Unfortunately, this worked in Chrome but not Firefox.
The problem was that jQuery is smart enough to know that even if a particular element has said it's visible, it might not actually be visible if (for example):
So in order for the unit tests to work, I need to have a real div in the test harness html, attach the widget to it, and then call a destroy at the end.
I was hoping for a different approach (and maybe someone will come along and provide another answer), but I'm not very hopeful, seeing as this is the approach that JQueryUI uses in their own QUnit tests: