ember.js - name - ember onclick
Error no detectado: error de aserción: llamada establecida en objeto destruido (4)
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 .
import {task, timeout} de ''ember-concurrency'';
myFunction: task(function * () {
// do somethinng
yield timeout(1000); // wait for x milliseconds
// do something else
}).drop(),
trabajando en pruebas de ember-cli. Después de que todas las pruebas hayan pasado, devuelve dos pruebas adicionales con errores.
Error no detectado: error de aserción: llamada activada en objeto destruido Fuente: ''../dist/assets/vendor.js:13269''
esta es una configuración de prueba unitaria
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'');
}
});
Esto se debe a que en el resultado de una promesa o de cualquier otro código diferido no se verifica el estado de destrucción de un objeto, o porque no se destruyó algo que se ha configurado e interactuado con eventos DOM o cualquier cosa externa al núcleo de Ascua.
Solía tener esto especialmente en algunos plugins de jQuery que asignaba a Ember, y durante las pruebas los complementos estaban destruyendo demasiado lentamente y entonces no estaba usando un ciclo de ejecución, o no estaba comprobando 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 (todo lo que se configure en didInsertElement
debería ser desmontado en willDestroyElement
por ejemplo).
Ok, luché con algo similar. Entonces, básicamente, cuando tiene "this.set ()" dentro de una promesa, puede suceder que la promesa tarde demasiado en resolverse, y el usuario ya haya hecho clic fuera de esa página, en este caso usted está tratando de establecer algo, eso es ya destruido Encontré que la solución más simple era simplemente un simple control al comienzo de la promesa.
if (this.isDestroyed) {
return;
}
this.set(''...'');
...
Editar: alternativamente puede usar Ember.trySet .
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)
});