JSDOM with extra tweak ( jquery / cheerio / request )
npm install jsdom-extra> JSDOM with extra tweak ( jquery / cheerio / request )
npm i jsdom-extra
```
if u didn't need jquery or cheerio, then no need install them.
but never try set/get $ from jsdom
or will throw Error
API options for jquery / cheerio
npm i jsdom-extra jquery
npm i jsdom-extra cheerio
if virtualConsole === false
> this is help if u didn't wanna see console output from jsdom
`ts
// old way
options.virtualConsole = new VirtualConsole();
// new way
options.virtualConsole = false;
`
* API
`ts`
// return jquery or cheerio
let $ = createJSDOM().$;
$(':root').length;
with create jsdom with extra prototype
`ts
export interface IJSDOM extends JSDOM {
$: JQueryStatic;
url: URL;
document: Document;
_options: IJSDOM_Symbol_Options;
fakeThen
}
export declare function createJSDOM(html?: string | Buffer | BinaryData, options?: IConstructorOptions): IJSDOM;
`
`ts`
// fake .then, not realy Promise, still is sync
createJSDOM().fakeThen(function (jsdom)
{
console.log(jsdom._options);
});
`ts`
asyncJSDOM().then(function (jsdom)
{
console.log(jsdom._options);
});
pack any jsdom object with extra
`ts
import { JSDOM } from 'jsdom';
import { packJSDOM } from 'jsdom-extra';
let jsdom2 = new JSDOM();
// will overwrite jsdom2 too
packJSDOM(jsdom2) // => return jsdom2
`
> allow use POST on fromURL
`ts`
function fromURL(url: string, options?: IFromUrlOptions): Promise
`ts
export interface IFromUrlOptions extends Partial
{
requestOptions?: Partial
cookieJar?: ICookieJar,
}
export interface IRequestOptionsJSDOM
{
resolveWithFullResponse: boolean;
encoding: null;
gzip: boolean;
headers: {
"User-Agent": string;
Referer: string;
Accept: string;
"Accept-Language": string;
};
jar: IRequestJar;
}
export interface IRequestOptions extends Partial
{
method?: 'POST' | 'GET' | string,
form?: {
[key: string]: any,
[key: number]: any,
},
}
`
`ts`
function fromFile(url: string, options?: IFromFileOptions): Promise
`ts`
createJSDOM()._options.ConstructorOptions
output
`ts`
{ windowOptions:
{ url: 'about:blank',
referrer: '',
contentType: 'text/html',
parsingMode: 'html',
userAgent: 'Mozilla/5.0 (win32) AppleWebKit/537.36 (KHTML, like Gecko) jsdom/11.6.2',
parseOptions: [Object],
runScripts: undefined,
encoding: 'UTF-8',
pretendToBeVisual: false,
virtualConsole: [VirtualConsole],
cookieJar: [CookieJar] },
resources: undefined,
beforeParse: [Function] }
will overwrite global JSDOM
`ts`
import JSDOM from 'jsdom-extra/auto';
const JSDOM = require("jsdom-extra/auto").JSDOM;
same as jsdom-global, but with
`ts`
function globalJsdom
#### create
`ts
require("jsdom-extra/global")()
const globalJsdom = require("jsdom-extra/global");
globalJsdom();
`
`ts
let ret: {
jsdom: IGlobalJSDOM;
window: DOMWindow;
document: Document;
cleanup: () => void;
};
ret = globalJsdom();
`
#### cleanup
`ts`
ret.cleanup();
ret.jsdom.cleanup();
#### Mocha
__Simple:__ Use Mocha's --require option. Add this to the test/mocha.opts file (create it if it doesn't exist)
``
mocha --require jsdom-extra/lib/global/register
__Advanced:__ For finer control, you can instead add it via [mocha]'s before and after hooks.
`ts
before(function () {
this.globalJsdom = require('jsdom-extra/global')()
})
after(function () {
this.globalJsdom.cleanup()
})
``
[mocha]: https://mochajs.org/