首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >未捕获错误:断言失败:调用已销毁对象的设置

未捕获错误:断言失败:调用已销毁对象的设置
EN

Stack Overflow用户
提问于 2014-08-05 14:49:13
回答 4查看 20.5K关注 0票数 42

工作在余烬-cli测试。在所有测试通过后,它会返回额外的两个错误测试。

未明错误:断言失败:调用已销毁的对象源:'../dist/assets/vendor.js:13269‘

这是一个单元测试配置。

代码语言:javascript
复制
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');
    }
});
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-09-16 12:43:05

这要么是因为由于承诺或任何其他延迟代码的结果,您没有检查对象的销毁状态,要么是因为您没有删除已经设置并与DOM事件或Ember核心之外的任何内容交互的内容。

我以前有这样的插件,尤其是在我映射到Ember的一些jQuery插件上,在测试过程中,插件破坏得太慢了,那时我要么不使用run循环,要么不检查我正在操作的Ember对象的销毁状态。

你可以这样做:

代码语言:javascript
复制
if ( !(obj.get('isDestroyed') || obj.get('isDestroying')) ) {
  // do your destroying code setting stuff
}

还可以考虑销毁可能在视图代码中初始化的任何jQuery插件(例如,didInsertElement中的任何设置都应该在willDestroyElement中删除)。

票数 52
EN

Stack Overflow用户

发布于 2016-05-30 14:05:17

好吧,我为类似的事情而挣扎。因此,基本上,当您在承诺中包含"this.set()“时,可能会发生这样的情况:承诺需要很长时间才能解决,并且用户已经单击了该页面,在这种情况下,您试图设置一些已经被销毁的内容。我发现最简单的解决方案就是在承诺开始时进行简单的检查。

代码语言:javascript
复制
if (this.isDestroyed) {
    return;
}
this.set('...');
...

编辑:或者您也可以使用Ember.trySet

票数 15
EN

Stack Overflow用户

发布于 2018-07-10 17:22:08

这个问题与一个没有完全解决的承诺和紧接着运行的另一个测试有关。

你应该试一试Ember并发

导入{任务,超时}从‘成员-并发’;

代码语言:javascript
复制
myFunction: task(function * () {

  // do somethinng

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

  // do something else

}).drop(),
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25141822

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档