jest: The original function name gets lost in the Jest error stack
test('hello world', () => {
function BadCode() {
throw new Error('noo')
}
function run(fn) {
fn()
}
run(BadCode)
});
I expect to see BadCode
in the stack because it’s a named function. But it shows up as fn
instead:
at fn (sum.test.js:3:11)
at run (sum.test.js:7:5)
at Object.<anonymous> (sum.test.js:10:3)
Same with error.stack
property.
Isn’t this just a Node issue?
Nope, try it in Node REPL and see BadCode
:
Uncaught Error: noo
at BadCode (repl:2:11)
at run (repl:2:5)
Also works correctly in Chrome.
I’ve done both locally so I used the same Node version (12.18.3
). So it’s Jest-specific.
I can also reproduce this on Repl.it: https://repl.it/repls/SecondaryItchyGui
I’ve tried vm.runInContext
locally but that did not trigger the issue. I also verified I’m not transpiling anything. So I have no idea what is the cause of this. The underlying bug is probably in Node or V8 but we need to figure out what is special about Jest that is triggering it.
Why fix this?
This affects the new React component stack printing strategy so it would be unfortunate for this to stay unfixed very long.
About this issue
- Original URL
- State: open
- Created 4 years ago
- Comments: 18 (16 by maintainers)
This “fixes” the reproduction
So related to #9147 somehow is my guess
Adding
"jest": {"transform": {}}
topackage.json
also “fixes” it, fwiw@flozender’s repo works (or doesn’t… It reproduces the bug, is what I’m trying to say)
@SimenB I tried the same and got
fn
:Node: v12.19.0 Jest: v26.5.3
Hmm, maybe not. @gaearon did you test with latest version of Jest? Repl.it is on 24 by default This is what I’m seeing running your example in
jest@26.5.2
(node 12.19.0)Go for it 🙂
Would love to give it a shot!