首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >停止测试库中的巨大错误输出

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

Stack Overflow用户
提问于 2020-09-24 11:48:06
回答 3查看 8.9K关注 0票数 17

我喜欢testing-library,在一个React项目中经常使用它,现在我正在尝试在一个角度的项目中使用它--但是我一直在努力处理巨大的错误输出,包括呈现的HTML。这不仅通常不起作用(我找不到一个元素,这里是它不在的HTML );而且如果您在调试模式下运行,它会被截断,通常在有趣的行之前。

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

我确信,如果HTML输出导致控制台窗口假脱机很长时间,您可以说我测试的组件太大了,但是我在Protractor中有很多集成测试,而且它们太慢了。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-10-01 12:31:10

我认为最好的解决方案是使用configure方法,并为getElementError传递一个自定义函数,该函数可以满足您的需要。

您可以在这里阅读有关配置的内容:https://testing-library.com/docs/dom-testing-library/api-configuration

这方面的一个例子可能如下所示:

代码语言:javascript
复制
configure({
  getElementError: (message: string, container) => {
    const error = new Error(message);
    error.name = 'TestingLibraryElementError';
    error.stack = null;
    return error;
  },
});

然后,您可以将其放入任何一个测试文件中,也可以使用Jest的setupFilessetupFilesAfterEnv配置选项使其全局运行。

票数 12
EN

Stack Overflow用户

发布于 2020-09-24 12:55:45

我假设您在您的项目中使用rtl运行玩笑。

我个人不会关掉它,因为它是为了帮助我们,但每个人都有办法,所以如果你有你的理由,那么就足够公平。

如果要禁用特定测试的错误,可以模拟console.error**.**

代码语言:javascript
复制
    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,这只会给出错误消息和消息下方的三个...点。

这里有一个打印输出示例,我到处乱搞:

代码语言:javascript
复制
    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脚本,它看起来如下:

代码语言:javascript
复制
DEBUG_PRINT_LIMIT=0 npm run test

这是医生

更新2

根据OP的关于github的FR,这也可以在不注入全局变量的情况下实现,以限制PrettyDOM行输出(如果在其他地方使用的话)。需要更改getElementError配置选项:

dom-testing-library/src/config.js

代码语言:javascript
复制
     // 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 
 }, 

调用堆栈也可以被删除。

票数 10
EN

Stack Overflow用户

发布于 2020-10-01 04:56:57

您可以通过使用config设置DOM测试库消息构建函数来更改消息的构建方式。在我的角度项目中,我将这个添加到test.js

代码语言:javascript
复制
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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64045789

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档