我假设您在项目中使用 rtl 运行 jest。
我个人不会关闭它,因为它可以帮助我们,但每个人都有办法,所以如果你有你的理由,那就足够公平了。
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 选项。检查文档
以上甚至可能禁用由 rtl 完成的 DOM 打印,我不确定,因为我没有尝试过,但如果你查看我链接的文档,它会说
“防止测试通过控制台打印消息。”
现在,如果上述方法不起作用,您几乎可以肯定除了 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:
根据github 上的 OP FR,这也可以在不注入全局变量来限制 PrettyDOM 行输出的情况下实现(以防它在其他地方使用)。getElementError
需要更改配置选项:
dom-testing-library/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
},
调用堆栈也可以删除