【发布时间】:2021-09-28 03:18:42
【问题描述】:
我目前正在调试一些用 jest over typescript 编写的测试,我有点头疼。
如果一个测试或测试类运行 Postgres SQL 并且查询中有错误,我会得到错误的堆栈跟踪,例如:
error: invalid input syntax for type integer: ""0""
at Parser.parseErrorMessage (/Users/sklivvz/src/xxx/node_modules/pg-protocol/src/parser.ts:369:69)
at Parser.handlePacket (/Users/sklivvz/src/xxx/node_modules/pg-protocol/src/parser.ts:188:21)
at Parser.parse (/Users/sklivvz/src/xxx/node_modules/pg-protocol/src/parser.ts:103:30)
at Socket.<anonymous> (/Users/sklivvz/src/xxx/node_modules/pg-protocol/src/index.ts:7:48)
at Socket.emit (node:events:365:28)
at addChunk (node:internal/streams/readable:314:12)
at readableAddChunk (node:internal/streams/readable:289:9)
at Socket.Readable.push (node:internal/streams/readable:228:10)
at TCP.onStreamRead (node:internal/stream_base_commons:190:23)
“错误”行非常有用,但是,堆栈跟踪只告诉我错误是由 pg-protocol 驱动程序引发的。我想知道我的代码中的哪一行产生了错误。
我有 82.7% 的把握确定这是因为 PG 的 query 是异步的。
不得不逐步调试或(喘气)console.log 处理每个错误非常耗时,而这只是显示正确的调用堆栈以使其变得更好的问题。
有没有人找到让这个开发者友好的方法?
【问题讨论】:
-
您是否允许更新实现而不是开玩笑测试?比如 postgres.query().catch(error =>)。
-
堆栈跟踪发生这种情况不是因为 Jest,而是因为 Postgres lib 的回调。该错误是在包
pg-protocol内的某处创建的,这也是在您的回调之前。要对代码进行堆栈跟踪,您必须捕获并抛出自己的错误。
标签: javascript typescript postgresql jestjs stack-trace