JQuery / Backbone删除不在Jasmine中工作

时间:2015-03-12 21:38:17

标签: javascript jquery backbone.js jasmine

我在Jasmine中测试Backbone View。当我调用视图的remove方法时,该元素实际上并未被删除。

我在视图中有这个事件处理程序:

onModelChange: function() {
  this.$el.html('');
  this.render();
}

我必须以这种方式编写,因为手动设置html是删除它的唯一方法。调用删除不会执行任何操作,并且当视图再次呈现时,它只会将新内容添加到旧内容中。我甚至尝试从Chromium中的开发人员工具中调用remove,但这也没有用。但是,当我在浏览器中手动测试时,删除功能会起作用,但它在Jasmine中不起作用,而且它会搞砸我的测试。

1 个答案:

答案 0 :(得分:1)

我认为问题的答案在于jQuery源代码:

remove: function( selector, keepData /* Internal Use Only */ ) {
        var elem,
            elems = selector ? jQuery.filter( selector, this ) : this,
            i = 0;

        for ( ; (elem = elems[i]) != null; i++ ) {
            if ( !keepData && elem.nodeType === 1 ) {
                jQuery.cleanData( getAll( elem ) );
            }

            if ( elem.parentNode ) {
                if ( keepData && jQuery.contains( elem.ownerDocument, elem ) ) {
                    setGlobalEval( getAll( elem, "script" ) );
                }
                elem.parentNode.removeChild( elem ); // right here to be specific
            }
        }

        return this;
    },

remove函数依赖于节点的父节点来执行删除。我猜测当测试在业力中运行时,骨干视图的节点没有父节点。为了更多地探索,我调试了测试。在控制台中,如果我查询视图元素的子节点并将其删除,则可以正常工作。