Added new toHaveClasses matcher; tests included

This commit is contained in:
Alex Yorkovich
2024-12-04 12:19:28 -06:00
parent 483d4ab3c3
commit 1805337424
4 changed files with 99 additions and 0 deletions

View File

@@ -27,6 +27,7 @@ getJasmineRequireObj().requireMatchers = function(jRequire, j$) {
'toHaveBeenCalledTimes',
'toHaveBeenCalledWith',
'toHaveClass',
'toHaveClasses',
'toHaveSpyInteractions',
'toMatch',
'toThrow',

View File

@@ -0,0 +1,36 @@
getJasmineRequireObj().toHaveClasses = function(j$) {
/**
* {@link expect} the actual value to be a DOM element that has the expected classes
* @function
* @name matchers#toHaveClasses
* @since 3.0.0
* @param {Object} expected - The class names to test for
* @example
* const el = document.createElement('div');
* el.className = 'foo bar baz';
* expect(el).toHaveClasses(['bar', 'baz']);
*/
function toHaveClasses(matchersUtil) {
return {
compare: function(actual, expected) {
if (!isElement(actual)) {
throw new Error(matchersUtil.pp(actual) + ' is not a DOM element');
}
return {
pass: expected.every(e =>
actual.classList.value.split(' ').some(c => c === e)
)
};
}
};
}
function isElement(maybeEl) {
return (
maybeEl && maybeEl.classList && j$.isFunction_(maybeEl.classList.contains)
);
}
return toHaveClasses;
};