¿Establecer ancho de ventana en jsDom?

Debería ser una pregunta simple. ¿Cómo establezco el ancho en un objeto jsDom?

jsdom.env({ url:'http://testdatalocation', scripts: ['http://code.jquery.com/jquery.js'], done: function(errors, tstWindow) { console.log(tstWindow.innerWidth); }; } }); 

No puedo imaginar cómo conseguir que el “Ancho interior” sea 1024

Actualmente no hay una opción formal o API para hacerlo.

Los valores de innerWidth y propiedades similares simplemente se establecen en valores literales :

 DOMWindow.prototype = createFrom(dom || null, { // ... name: 'nodejs', innerWidth: 1024, innerHeight: 768, outerWidth: 1024, outerHeight: 768, // ... }); 

Más allá de los casos de prueba y la documentación, outerWidth no se hace referencia a ninguna otra parte en jsdom , por lo que probablemente podría asignar un nuevo valor dentro del evento created , actualizando también la outerWidth .

El principal caso de uso para created es modificar el objeto de la ventana (por ejemplo, agregar nuevas funciones en prototipos incorporados) antes de que se ejecuten los scripts.

 created: function (errors, tstWindow) { tstWindow.outerWidth = tstWindow.innerWidth = 1440; }, done: function(errors, tstWindow) { console.log(tstWindow.innerWidth); } 

Los métodos resizeTo y resizeBy no están implementados. Puedes verlo buscando a través del código base de jsdom:

 $ grep -P 'resize(To|By)' `find . -type f` ./lib/jsdom/browser/index.js: resizeBy: NOT_IMPLEMENTED(null, 'window.resizeBy'), ./lib/jsdom/browser/index.js: resizeTo: NOT_IMPLEMENTED(null, 'window.resizeTo'), 

Si solo desea establecer el tamaño de la ventana de una vez por todas en el momento de la inicialización, puede establecer el valor de innerWidth a lo que desee. En un navegador real, esta no es la forma correcta de hacerlo, pero en jsdom funcionaría.

Sin embargo, si tiene un código que depende de que resizeTo esté presente, puede agregar su propio polyfill al constructor que construye ventanas:

 var jsdom = require("jsdom"); var document = jsdom.env({ html: "", done: function (error, w) { console.log(w.innerWidth, w.innerHeight); w.constructor.prototype.resizeTo = function (width, height) { this.innerWidth = this.outerWidth = width; this.innerHeight = this.outerHeight = height; }; w.resizeTo(100, 200); console.log(w.innerWidth, w.innerHeight); } }); 

Esto muestra:

 1024 768 100 200 

El código anterior es para fines ilustrativos. No he pensado en todos los entresijos de escribir un polyfill para resizeTo . resizeBy se manejaría de manera similar pero agregaría deltas al tamaño de la ventana.