我正在使用Selenium开发一个端到端的测试套件,其中的测试用例是使用jest测试运行器用JavaScript编写的。
我的问题是selenium经常在某些东西不起作用的时候突然失败,而且几乎没有解释它失败的原因。不用说,像这样的调试测试可能相当困难。
我正在寻找一种方法来记录每个测试用例,这样我就知道测试在哪里失败了,但是如果测试实际上失败了,只在测试输出中显示这些日志(为了不污染来自测试的控制台输出与大量不必要的日志)。
所以我想做的是:
describe(() => {
it('case 1', async () => {
// this log should only be printed on the console if this test fails
logger.info('message from case 1');
// ...
});
it('case 2', () => {
logger.info('message from case 2');
// ...
});
});
字符串
因此,如果case 1
中的测试失败而case 2
没有失败,我会在控制台输出中看到message from case 1
(理想情况下,就在该测试用例的错误之前),而不是 * message from case 2
。
jest可以做到这一点吗?我可以自由使用任何日志库。
5条答案
按热度按时间r55awzrz1#
我遇到了同样的问题,找不到明确的解决方案。似乎是it's low on Facebook's to do list,所以这里有一个解决方案。它使用了我找到的here和here的代码片段。这个想法是,在每个jest运行之前,你设置一个消息存储,并全局覆盖控制台,将所有日志转移到那里。每次测试之后,你检查测试是否失败,如果失败,把隐藏的信息打印出来
package.json:
字符串
setup.js:
型
如果你需要做任何其他清理,你可以在你的测试文件中“扩展”afterEach,像这样:
some.test.js
型
缺点:
oug3syen2#
有一些方法可以巧妙地处理
expect
调用,让您知道故障发生在哪里。字符串
现在,如果
someFunction()
返回的不是“hello”,它会告诉你位置值,因为它会抱怨预期的结果。只有当您得到一个Jest错误,但没有从正常的
expect
失败消息中获得足够的信息,并且您需要更多的细节时,这才是有用的。xwmevbvl3#
这可能是一个糟糕的做法,但我注意到
expect().toBe()
或其他东西会在不相等的情况下抛出一个Error,你可以先捕获它,然后记录它。这是示例代码,当我尝试测试是每一个文本消息翻译的语言。
字符串
这是最快的方法,也是最容易阅读的方法,因为选择的答案让我很难理解。
9jyewag04#
测试环境可以很好地处理这个问题。它缓冲所有的控制台消息,根据测试对它们进行分组,并且只在测试失败时才显示它们。环境相对于设置文件或报告器的好处是,它可以有选择地应用于特定的测试,而将全局控制台单独留给所有其他测试。
./tests/testEnvironment.js
字符串
对于每个测试套件,使用此环境需要以下注解:
型
rlcwz9us5#
我修改了
siilike
的方法,它工作得很好。我仍然有一些落后的控制台消息,我猜Jest没有捕获到。之前:
字符串
之后:
型
Jest更新:
的字符串