Quill.js和zombie.js

时间:2016-02-01 13:59:12

标签: node.js contenteditable jsdom zombie.js quill

尝试在zombie.js无头浏览器中测试quill.js编辑器(contenteditable div)。

  1. 抱怨缺少document.getSelection
  2. 抱怨缺少document.createTreeWalker
  3. 如果我使用编辑器的DOM节点手动调度更改事件,似乎没有响应。
  4. 任何人都知道如何使这项工作?

1 个答案:

答案 0 :(得分:3)

好的,这是我发现的:

  1. zombie.js使用的当前(旧)版本的jsdom不支持document.getSelection。我现在不得不修补它。 zombie.js有一个待定的PR,它应该将jsdom更新为可用的更高版本:https://github.com/assaf/zombie/issues/939
  2. document.createTreeWalker - 相同
  3. 事实证明quill.js正在侦听“keyup”或“keydown”而非“更改”,因此需要调度它们。
  4. 下面是一些遗漏的DOM方法的可怕的猴子补丁,结果证明足以测试最小的quill.js:

    var zombie = require( "zombie" );
    zombie.Pipeline.addHandler(function(browser, request, response) {
    
        browser.document.getSelection = browser.window.getSelection = function() {
    
            console.warn( "getSelection called - monkey-patched, incorrect implementation" );
            return null;
    
        };
        browser.document.createTreeWalker = function( x ) {
    
            console.warn( "createTreeWalker called - monkey-patched, incorrect implementation" );
            return {
    
                currentNode: x,
                nextNode: function() {
    
                    if( this.currentNode.childNodes && this.currentNode.childNodes.length ) {
    
                        this.currentNode = this.currentNode.childNodes[ 0 ];
    
                    } else if( this.currentNode.nextSibling ) {
    
                        this.currentNode = this.currentNode.nextSibling;
    
                    } else if( this.currentNode.parentNode ) {
    
                        this.currentNode = this.currentNode.parentNode.nextSibling;
    
                    }
                    return this.currentNode || null;
    
                }
    
            };
    
        };
        return response;
    
    } );