停止测试库的巨大错误输出



我喜欢testing-library,在React项目中使用过很多,现在我正试图在Angular项目中使用它,但我一直在与巨大的错误输出作斗争,包括渲染的HTML文本。这不仅通常没有帮助(我找不到元素,这是HTML中不是(;但它会被截断,如果您在调试模式下运行,通常会在感兴趣的行之前被截断。

我只是把它作为一个库添加到标准的Angular Karma+Jasmine设置中。

如果HTML输出导致我的控制台窗口假脱机很长时间,我相信你可以说我正在测试的组件太大了,但我在Protractor中有很多集成测试,它们是SO SLOW:(.

我认为最好的解决方案是使用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配置选项使其全局运行。

我假设您在项目中使用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 --silentCLI选项。检查文档

上面甚至可能禁用rtl完成的DOM打印,我不确定,因为我没有尝试过,但如果你看看我链接的文档,它说

"阻止测试通过控制台打印消息">

现在,如果以上内容不起作用,那么除了DOM建议之外,几乎可以肯定的是,您已经禁用了所有内容。在这种情况下,您可以查看react-testing-library's源代码,并找出用于这些print语句的内容。它是console.log吗?它是console.warn吗?当你得到它时,就像上面的选项1一样模拟它

更新

经过一番挖掘,我发现所有的testing-libraryDOM打印都建立在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测试库/src/config.js

// called when getBy* queries fail. (message, container) => Error 
getElementError(message, container) { 
const error = new Error( 
[message, prettyDOM(container)].filter(Boolean).join('nn'), 
) 
error.name = 'TestingLibraryElementError' 
return error 
}, 

调用堆栈也可以删除

您可以通过使用config设置DOM测试库消息构建函数来更改消息的构建方式。在我的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.

相关内容

  • 没有找到相关文章

最新更新