Source: testing/DOMCreator.js

import { JSDOM, VirtualConsole } from "jsdom"

import AssetMetadataLoader from "./AssetMetadataLoader.js"

/**
 * Creates a JSDOM based on the the given HTML and query string.
 *
 * @memberof testing
 */
class DOMCreator {
  constructor(assetMetadata) {
    this.assetMetadata = assetMetadata
  }

  create({html,queryString}) {

    const resourceLoader = new AssetMetadataLoader(this.assetMetadata)


    const url = "http://example.com" + ( queryString ? `?${queryString}` : "" )

    const scripts = this.assetMetadata.scriptURLs().map( (url) => `<script src="${url}"></script>` )
    const virtualConsole = new VirtualConsole()
    virtualConsole.sendTo(console);
    return new JSDOM(
      `<!DOCTYPE html>
        <html>
        <head>
        ${scripts}
        </head>
        <body>
        ${html}
        </body>
        </html>
        `,{
          resources: "usable",
          runScripts: "dangerously",
          includeNodeLocations: true,
          resources: resourceLoader,
          url: url
        }
    )
  }
}
export default DOMCreator