<p>sinon falla al restaurar las propiedades stubped en el objeto de la ventana en IE11</p>

Creado en 22 ago. 2018  ·  4Comentarios  ·  Fuente: sinonjs/sinon

Describe el error
es posible hacer stub, pero no restaurar algunas propiedades en el objeto de ventana en IE11, lo que hace que sinon arroje un error de tipo: TypeError: Cannot redefine non-configurable property '...'

Reproducir
https://jsbin.com/qixexucasa/edit?js , consola, salida: compare el comportamiento en IE11 y cualquier otro navegador.

"TypeError: Cannot redefine non-configurable property 'parent'
   at restore (https://unpkg.com/[email protected]/pkg/sinon.js:3253:13)
   at Global code (https://null.jsbin.com/runner:18:1)"

Comportamiento esperado
En IE11, ciertas propiedades del objeto de ventana no son configurables, pero aún es posible apuntarlas y esto es bastante útil en las pruebas. El comportamiento esperado sería uno de esos:

  1. sinon debería arrojar un error en el paso stub (no en el paso restore ()) que indica que no es posible stub esta propiedad;
  2. al copiar la propiedad, sinon no debe copiar el atributo configurable , ¿hay alguna razón para esto? En el caso de false value, sinon solo crea problemas por sí mismo, por lo que no es posible restaurarlo. Entonces esta línea debe ser siempre true :
    https://github.com/sinonjs/sinon/blob/638e104d1e6ed9908c1b09bd33d2cba1aa8c217a/lib/sinon/default-behaviors.js#L251

Contexto:

  • Versión de la biblioteca: todas las versiones se ven afectadas, probadas en 4.4.6 y 6.1.5.

Confirme si es un error o un comportamiento esperado.

Bug Help wanted hacktoberfest pinned

Comentario más útil

Tengo el mismo problema y encontré la causa de esto en sinon / default-behaviors.js línea 258.

value: function value(fake, newVal) {
    var rootStub = fake.stub || fake;

    Object.defineProperty(rootStub.rootObj, rootStub.propName, {
        value: newVal,
        enumerable: true,
        configurable: isPropertyConfigurable(rootStub.rootObj, rootStub.propName)
    });

    return fake;
}

No sé por qué debería seguir la opción configurable del objeto original. Creo que tiene que ser siempre cierto porque después de la copia, se puede restaurar o reescribir (normalmente sinon.restore ()) independientemente de la opción del objeto original.

Temporalmente solucioné este problema cambiando que el código siempre devuelve verdadero.

Todos 4 comentarios

Gracias por su descripción detallada del problema.

¿Ir con la segunda estrategia realmente haría que esto funcionara en IE11? Si es así, esa sería mi preferencia.

¿Estaría dispuesto a contribuir con una solicitud de extracción para realizar los cambios necesarios?

Este problema se ha marcado automáticamente como obsoleto porque no ha tenido actividad reciente. Se cerrará si no se produce más actividad. Gracias por sus aportaciones.

Este problema se ha marcado automáticamente como obsoleto porque no ha tenido actividad reciente. Se cerrará si no se produce más actividad. Gracias por sus aportaciones.

Tengo el mismo problema y encontré la causa de esto en sinon / default-behaviors.js línea 258.

value: function value(fake, newVal) {
    var rootStub = fake.stub || fake;

    Object.defineProperty(rootStub.rootObj, rootStub.propName, {
        value: newVal,
        enumerable: true,
        configurable: isPropertyConfigurable(rootStub.rootObj, rootStub.propName)
    });

    return fake;
}

No sé por qué debería seguir la opción configurable del objeto original. Creo que tiene que ser siempre cierto porque después de la copia, se puede restaurar o reescribir (normalmente sinon.restore ()) independientemente de la opción del objeto original.

Temporalmente solucioné este problema cambiando que el código siempre devuelve verdadero.

¿Fue útil esta página
0 / 5 - 0 calificaciones