我喜欢testing-library,在一个React项目中经常使用它,现在我正在尝试在一个角度的项目中使用它--但是我一直在努力处理巨大的错误输出,包括呈现的HTML。这不仅通常不起作用(我找不到一个元素,这里是它不在的HTML );而且如果您在调试模式下运行,它会被截断,通常在有趣的行之前。
我只是把它作为一个库添加到标准的角Karma+Jasmine设置中。
我确信,如果HTML输出导致控制台窗口假脱机很长时间,您可以说我测试的组件太大了,但是我在Protractor中有很多集成测试,而且它们太慢了。
发布于 2020-10-01 12:31:10
我认为最好的解决方案是使用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配置选项使其全局运行。
发布于 2020-09-24 12:55:45
我假设您在您的项目中使用rtl运行玩笑。
我个人不会关掉它,因为它是为了帮助我们,但每个人都有办法,所以如果你有你的理由,那么就足够公平。
如果要禁用特定测试的错误,可以模拟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
});如果您想为所有的测试关闭它,您可以使用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
根据OP的关于github的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
}, 发布于 2020-10-01 04:56:57
您可以通过使用config设置DOM测试库消息构建函数来更改消息的构建方式。在我的角度项目中,我将这个添加到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 by https://github.com/wyze。
https://stackoverflow.com/questions/64045789
复制相似问题