Error no capturado: Aserción fallida: llamando a conjunto en objeto destruido


Trabajando en pruebas ember-cli. Después de todas las pruebas pasadas, devuelve dos pruebas adicionales con errores.

Error no capturado: Aserción fallida: llamando a conjunto en objeto destruido Fuente : '../ dist / assets / vendor.js: 13269 '

Esta es una configuración de prueba de unidad

import Ember from "ember";
import { test,moduleFor } from 'ember-qunit';
import startApp from '../helpers/start-app';

var App;

module('An Integration test',{
    setup:function(){
        App=startApp();
    },
    teardown: function() {
        Ember.run(App, 'destroy');
    }
});
Author: Nininea, 2014-08-05

4 answers

Esto se debe a que en el resultado de una promesa o cualquier otro código diferido no comprueba el estado de destrucción de un objeto, o porque no desmontó algo que se ha configurado e interactúa con eventos DOM o cualquier cosa externa al núcleo de Ember.

Solía tener esto especialmente en algunos complementos de jQuery que asigné a Ember, y durante las pruebas los complementos se estaban destruyendo demasiado lentamente y entonces no estaba usando un bucle de ejecución o no verificando el estado destruido del objeto Ember que estaba manipulando.

Puedes hacerlo con:

if ( !(obj.get('isDestroyed') || obj.get('isDestroying')) ) {
  // do your destroying code setting stuff
}

También piense en destruir cualquier complemento de jQuery que pueda haber sido inicializado en el código de sus vistas (cualquier cosa configurada en didInsertElement debería ser desmontada en willDestroyElement, por ejemplo).

 41
Author: Huafu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-10-27 04:44:43

Ok luché con algo similar. Así que básicamente cuando tienes " esto.set()" dentro de una promesa, puede suceder que la promesa tarde demasiado en resolverse, y el usuario ya hizo clic lejos de esa página, en este caso está tratando de establecer algo, que ya está destruido. Encontré la solución más simple para ser solo un simple cheque al principio de la promesa.

if (this.isDestroyed) {
    return;
}
this.set('...');
...

Editar: alternativamente puede usar Ember.trySet .

 10
Author: Arntor,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-08-18 12:13:11

Tuve un problema similar en una prueba de integración. Para resolver, en la prueba de integración, esperé antes de realizar la siguiente acción.

import wait from 'ember-test-helpers/wait';
wait().then(() => {
// perform action (which previously used to cause an exception)
});
 0
Author: Naveen N,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-03-13 01:38:23

El problema está relacionado con una promesa que no se resuelve completamente y otra prueba que se ejecuta inmediatamente después.

Deberías probar Ember Concurrency.

Importa { tarea, tiempo de espera } desde 'ember-concurrency';

myFunction: task(function * () {

  // do somethinng

  yield timeout(1000); // wait for x milliseconds

  // do something else

}).drop(),
 0
Author: lookininward,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-07-10 17:22:08