Как я могу заставить Chai показывать фактические и ожидаемые значения, используя toString()

Недавно я переключился с should.js на chai.js, так как обнаружил, что первый вызывает проблемы при тестировании в браузере. Это изменение не потребовало каких-либо изменений в моем наборе тестов, поскольку синтаксис поддерживается, но я вижу, что вывод неудачных тестов больше не показывает мне фактические и ожидаемые значения полезным способом:

AssertionError: expected [ Array(9) ] to deeply equal [ Array(9) ]

Я могу заставить его выдать представление этих значений, добавив эту строку:

chai.config.truncateThreshold = 0;

Однако это приводит к исчерпывающему выводу всех значений, включая функции и свойства прототипа. Тоже довольно бесполезно.

Так есть ли какой-то способ, которым мне не хватает, чтобы chai вел себя как should.js, где фактические/ожидаемые значения отображаются с использованием их метода toString()?


person Jason Boyd    schedule 17.11.2014    source источник
comment
Я могу предложить создать проблему в репозитории shouldjs, если у вас есть проблемы с этим. Should.js и chai.js используют разные проверки объектов (как они печатаются)   -  person den bardadym    schedule 18.11.2014
comment
@denbardadym, вы говорите, что chai повторно использует код mustjs? В противном случае, зачем мне сообщать о проблеме с чаем в репозиторий shouldjs? Но да, я полагаю, сообщение о проблеме — это следующий шаг. Тем не менее, я сбит с толку тем, что это не влияет на всех, кто его использует, поэтому я предположил, что не понимаю, как это сделать. Зачем кому-то хотеть, чтобы при неудачных тестах сообщалось, что [Объект] не соответствует [Объекту]?   -  person Jason Boyd    schedule 18.11.2014
comment
Я имею в виду, что в начале (вы называете это «проблемами в браузере») вы написали, что использовали should.js, и на какой-то момент это было нормально. Итак, если вы согласны с should.js, почему бы просто не исправить эту проблему? Чтобы было ясно, я сопровождаю should.js, поэтому я могу только помочь вам исправить ошибки в нем.   -  person den bardadym    schedule 18.11.2014
comment
Ах! Извините, не понял. Проблема, с которой я столкнулся с shouldjs, заключалась в том, что он продолжал зависать Karma при втором запуске, независимо от того, как я его настроил. Переход на Chai решил эту давнюю проблему и поначалу казался большой победой, поскольку наборы тестов работали без изменений. Я пойду зарегистрирую проблему вместе с проектом.   -  person Jason Boyd    schedule 18.11.2014


Ответы (2)


Один из способов заставить Chai (v1.10.0) отображать фактические и ожидаемые значения с помощью .toString() — это исправить его utils.objDisplay во время выполнения.

Основная суть такова:

chai.use(function(_chai,utils) {
  utils.objDisplay = function(obj) { return obj+''; };
});

Однако на практике это немного сложнее из-за того, как Chai создает экземпляры дубликатов (то есть: !==) ссылок на модули внутри; в этом случае необходимо также исправить utils.getMessage.

Вот скрипт для демонстрации общего исправления вместе с тривиальным примером пользовательского форматирования для Array объектов: https://jsfiddle.net/humbletim/oc1tnqpy/

person humbletim    schedule 21.02.2015
comment
Спасибо за этот хак. Я поместил его в пакет NPM: p github.com/TeNNoX/chai-formatter-monkeypatch - person TeNNoX; 27.04.2021

Согласно https://www.chaijs.com/guide/styles/#configuration, chai теперь позволяет отключить усечение порога длины для фактических и ожидаемых значений в ошибках утверждения.

chai.config.truncateThreshold = 0; // disable truncating

person Akshay Maldhure    schedule 30.03.2021