Created
March 8, 2021 11:15
-
-
Save ahmad2smile/068e481d65b0cb82a7c9b9f1bc9d0ee0 to your computer and use it in GitHub Desktop.
Mock Missing SVG Functions in JSDom for Jest
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
beforeEach(()=>{ | |
Object.defineProperty(global.SVGSVGElement.prototype, 'createSVGMatrix', { | |
writable: true, | |
value: jest.fn().mockImplementation(() => ({ | |
martix: jest.fn(() => [[]]), | |
a: 0, | |
b: 0, | |
c: 0, | |
d: 0, | |
e: 0, | |
f: 0, | |
flipX: jest.fn().mockImplementation(() => global.SVGSVGElement), | |
flipY: jest.fn().mockImplementation(() => global.SVGSVGElement), | |
inverse: jest.fn().mockImplementation(() => global.SVGSVGElement), | |
multiply: jest.fn().mockImplementation(() => global.SVGSVGElement), | |
rotate: jest.fn().mockImplementation(() => ({ | |
translate: jest.fn().mockImplementation(() => ({ | |
rotate: jest.fn(), | |
})), | |
})), | |
rotateFromVector: jest.fn().mockImplementation(() => global.SVGSVGElement), | |
scale: jest.fn().mockImplementation(() => global.SVGSVGElement), | |
scaleNonUniform: jest.fn().mockImplementation(() => global.SVGSVGElement), | |
skewX: jest.fn().mockImplementation(() => global.SVGSVGElement), | |
skewY: jest.fn().mockImplementation(() => global.SVGSVGElement), | |
translate: jest.fn().mockImplementation(() => ({ | |
multiply: jest.fn().mockImplementation(() => ({ | |
multiply: jest.fn().mockImplementation(() => global.SVGSVGElement), | |
})), | |
})), | |
})), | |
}); | |
Object.defineProperty(global.SVGSVGElement.prototype, 'createSVGPoint', { | |
writable: true, | |
value: jest.fn().mockImplementation(() => ({ | |
x: 0, | |
y: 0, | |
matrixTransform: jest.fn().mockImplementation(() => ({ | |
x: 0, | |
y: 0, | |
})), | |
})), | |
}); | |
Object.defineProperty(global.SVGSVGElement.prototype, 'createSVGTransform', { | |
writable: true, | |
value: jest.fn().mockImplementation(() => ({ | |
angle: 0, | |
matrix: { | |
a: 1, | |
b: 0, | |
c: 0, | |
d: 1, | |
e: 0, | |
f: 0, | |
multiply: jest.fn(), | |
}, | |
setMatrix: jest.fn(), | |
setTranslate: jest.fn(), | |
})), | |
}); | |
}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Just for reference: the three functions you mock have the following issues on jsdom:
SVGSVGElement.createSVGMatrix
- jsdom/jsdom#2716 - (it's part of Geometry Interfaces Module Level 1)SVGSVGElement.createSVGPoint
- jsdom/jsdom#300SVGSVGElement.createSVGTransform
- mentioned but disabled in https://github.com/jsdom/jsdom/blob/04541b377d9949d6ab56866760b7883a23db0577/lib/jsdom/living/nodes/SVGSVGElement.webidl#L26 - maybe because of the reasons mentioned in jsdom/jsdom#2716According to what I find online, the implementation of
SVGSVGElement.createSVGMatrix
should (according to https://developer.mozilla.org/en-US/docs/Web/API/SVGSVGElement#svgsvgelement.createsvgmatrix) not return a mock implementation ofglobal.SVGSVGElement
but ofSVGMatrix
- see https://developer.mozilla.org/en-US/docs/Web/API/DOMMatrixReadOnly#dommatrixreadonly.flipy.Here's the updated mock: