Removing global document references (#1482)
fix for options `recordCanvas: true`: * replace document.createElement with doc.createElement in rrweb-snapshot code * Eoghan: add a regression test to prevent future accidental use of `document` instead of `doc`. This test can be excised if a new feature can only be run in the browser and not in the jsdom environment
This commit is contained in:
@@ -7,6 +7,7 @@ import {
|
||||
serializeNodeWithId,
|
||||
_isBlockedElement,
|
||||
} from '../src/snapshot';
|
||||
import snapshot from '../src/snapshot';
|
||||
import { serializedNodeWithId, elementNode } from '../src/types';
|
||||
import { Mirror } from '../src/utils';
|
||||
|
||||
@@ -257,3 +258,27 @@ describe('form', () => {
|
||||
expect(sel?.childNodes).toEqual([]); // shouldn't be stored in childNodes while in transit
|
||||
});
|
||||
});
|
||||
|
||||
describe('jsdom snapshot', () => {
|
||||
const render = (html: string): Document => {
|
||||
document.write(html);
|
||||
return document;
|
||||
};
|
||||
|
||||
it("doesn't rely on global browser objects", () => {
|
||||
// this test is incomplete in terms of coverage,
|
||||
// but the idea being that we are checking that all features use the
|
||||
// passed-in `doc` object rather than the global `document`
|
||||
// (which is only present in browsers)
|
||||
// in any case, supporting jsdom is not a primary goal
|
||||
|
||||
const doc = render(`<!DOCTYPE html><p>Hello world</p><canvas></canvas>`);
|
||||
const sn = snapshot(doc, {
|
||||
// JSDOM Error: Not implemented: HTMLCanvasElement.prototype.toDataURL (without installing the canvas npm package)
|
||||
//recordCanvas: true,
|
||||
});
|
||||
expect(sn).toMatchObject({
|
||||
type: 0,
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user