Остановить вывод огромных ошибок из библиотеки тестирования
Я люблю
testing-library
, часто использовали его в проекте React, и сейчас я пытаюсь использовать его в проекте Angular, но я всегда боролся с огромным количеством ошибок, включая HTML-текст рендеринга. Мало того, что это обычно не помогает (я не мог найти элемент, вот HTML, где его нет); но он обрезается, часто перед интересной строкой, если вы работаете в режиме отладки.
Я просто добавил его как библиотеку вместе со стандартной настройкой Angular Karma+Jasmine.
Я уверен, что вы могли бы сказать, что компоненты, которые я тестирую, слишком велики, если вывод HTML заставляет мое окно консоли постоянно буферизоваться, но у меня есть много интеграционных тестов в Protractor, и они НАСТОЛЬКО МЕДЛЕННЫЕ:(.
3 ответа
Я бы сказал, что лучшим решением было бы использовать
configure
метод и передать настраиваемую функцию для
getElementError
который делает то, что вы хотите.
Вы можете прочитать о конфигурации здесь: https://testing-library.com/docs/dom-testing-library/api-configuration
Пример этого может выглядеть так:
configure({
getElementError: (message: string, container) => {
const error = new Error(message);
error.name = 'TestingLibraryElementError';
error.stack = null;
return error;
},
});
Затем вы можете поместить это в любой отдельный тестовый файл или использовать параметры конфигурации Jest setupFiles или setupFilesAfterEnv, чтобы запустить его глобально.
Я предполагаю, что вы используете jest с rtl в своем проекте.
Я лично не стал бы его выключать, потому что он нужен нам, чтобы помочь нам, но у каждого есть способ, так что, если у вас есть причины, то достаточно справедливо.
1. Если вы хотите отключить ошибки для определенного теста, вы можете смоделировать
console.error
.
it('disable error example', () => {
const errorObject = console.error; //store the state of the object
console.error = jest.fn(); // mock the object
// code
//assertion (expect)
console.error = errorObject; // assign it back so you can use it in the next test
});
2. Если вы хотите отключить звук на весь тест, вы можете использовать
jest --silent
Вариант CLI. Проверить документы
Вышеупомянутое может даже отключить печать DOM, которая выполняется rtl, я не уверен, поскольку я не пробовал этого, но если вы посмотрите на документы, которые я связал, там говорится
"Запретить тестам выводить сообщения через консоль".
Теперь у вас почти наверняка отключено все, кроме рекомендаций DOM, если вышеперечисленное не работает. В этом случае вы можете посмотреть
react-testing-library's
исходный код и выясните, что используется для этих операторов печати. Это
console.log
? это
console.warn
? Когда у вас есть это, просто смоделируйте это, как вариант 1 выше.
ОБНОВИТЬ
Покопавшись, я обнаружил, что все
testing-library
DOM-печать построена на
prettyDOM()
;
В то время как
prettyDOM()
не может быть отключен, вы можете ограничить количество строк до 0, и это просто даст вам сообщение об ошибке и три точки
...
под сообщением.
Вот пример распечатки, с которой я возился:
TestingLibraryElementError: Unable to find an element with the text: Hello ther. This could be because the text is broken up by multiple elements. In this case, you can provide a function for your text matcher to make your matcher more flexible.
...
Все, что вам нужно сделать, это передать переменную среды перед выполнением вашего набора тестов, поэтому, например, со сценарием npm это будет выглядеть так:
DEBUG_PRINT_LIMIT=0 npm run test
ОБНОВЛЕНИЕ 2:
Согласно FR OP на github, этого также можно достичь без введения глобальной переменной, чтобы ограничить вывод строки PrettyDOM (в случае, если она используется в другом месте). В
getElementError
параметр конфигурации необходимо изменить:
Дом-тестирование-библиотека / SRC /config.js
// called when getBy* queries fail. (message, container) => Error
getElementError(message, container) {
const error = new Error(
[message, prettyDOM(container)].filter(Boolean).join('\n\n'),
)
error.name = 'TestingLibraryElementError'
return error
},
Вы можете изменить способ построения сообщения, установив функцию построения сообщения библиотеки тестирования DOM с config. В моем проекте Angular я добавил это в
test.js
:
configure({
getElementError: (message: string, container) => {
const error = new Error(message);
error.name = 'TestingLibraryElementError';
error.stack = null;
return error;
},
});
На это ответили здесь: https://github.com/testing-library/dom-testing-library/issues/773 от https://github.com/wyze.