Javascript 比较断言中的函数输出类型

Javascript 比较断言中的函数输出类型,javascript,ecmascript-6,mocha.js,chai,jsdom,Javascript,Ecmascript 6,Mocha.js,Chai,Jsdom,我正在努力使用chai、mocha和JS-DOM编写一个测试断言。 我有一个简单的函数,如: function HtmlElement(el) { this.element = (el instanceof HTMLElement) ? el :document.createElement(el); } 在测试中,我有: it('should have addClass method', function () { const ul = (new HtmlElement('ul'));

我正在努力使用chai、mocha和JS-DOM编写一个测试断言。 我有一个简单的函数,如:

function HtmlElement(el) {
  this.element = (el instanceof HTMLElement) ? el :document.createElement(el);
}
在测试中,我有:

it('should have addClass method', function () {
  const ul = (new HtmlElement('ul'));
  ul.element.should.be.equals('<ul></ul>'); // Outputs the actual UL 
});
it('应该有addClass方法',函数(){
常数ul=(新的HtmlElement('ul');
ul.element.shoul.be.equals(“
    ”);//输出实际ul });
    但错误是:

    AssertionError: expected <ul></ul> to equal '<ul></ul>'
    
    断言错误:预期
      等于'
        '

        是我不明白的一个-返回的是什么类型的输出,这里应该使用什么断言?

        下面是deceze在中的意思。在测试中:

        ul.element.should.be.equals('<ul></ul>');
        
        您可以在控制台上获得
        true
        。如果您这样做:

        console.log(document.createElement("ul") === document.createElement("ul"));
        
        由于两个操作数是两个不同的对象,因此会得到
        false
        。出于您的目的,这两个DOM节点可能“相同”,但就
        ==
        而言,它们并不相同。由于没有字符串可以与DOM节点是同一对象,因此测试失败。错误消息看起来可能令人困惑,但这是因为当JSDOM打印出错误时,它会序列化DOM节点。也就是说,然后JSDOM打印出DOM节点,它实际上打印出其
        .outerHTML
        属性的值,
        .outerHTML
        是节点的序列化

        你想测试什么取决于你的最终目标是什么。如果要测试元素的结构,可以选中
        .outerHTML
        ,类似于:

        ul.element.should.have.property("outerHTML").equal("<ul></ul>");
        
        如果您想让它作为测试代理,以获得
        HTMLElement
        ,我建议您这样做:

        ul.element.should.be.instanceof(HTMLElement);
        

        返回一个对象,并将其与字符串进行比较。打印错误消息时,对象被转换为一个字符串,该字符串看起来完全相同,但一点也不相同。我明白了-那么我如何匹配它呢?感谢您提供的详细说明。它使画面清晰无比!我还修复了我的测试,这个例子确实是为了检查addClass方法。
        ul.element.should.have.property("addClass").be.a("function");
        
        ul.element.should.be.instanceof(HTMLElement);