Вот что означало deceze в его комментарии .В тесте:
ul.element.should.be.equals('<ul></ul>');
ul.element
- это объект JavaScript.Точнее, это DOM-узел.Тем не менее, <ul></ul>
является строкой.Чай делает сравнение с ===
.Если вы сравниваете узел DOM с чем-то, использующим ===
, единственное, что вернет истинное значение, - это точно такой же узел DOM .«Точно так же» означает точно такой же объект JavaScript.Если вы сделаете:
const node = document.createElement("ul");
console.log(node === node);
Вы получите 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>");
Название вашего теста: "должен иметь метод addClass" ... так что, возможно, вам следуеттестирование этого:
ul.element.should.have.property("addClass").be.a("function");
Если бы вы хотели, чтобы это был прокси-сервер для тестирования, чтобы вы получили HTMLElement
, я бы предложил сделать это вместо:
ul.element.should.be.instanceof(HTMLElement);