nodejs-testing icon indicating copy to clipboard operation
nodejs-testing copied to clipboard

Where can I find the call stack of an exception/assert?

Open toptensoftware opened this issue 9 months ago • 8 comments

When a test throws an exception or an assertion is there somewhere I can see the call stack?

eg: this is what is see with the extension:

image

whereas this is what I see from the command line which is much more useful.

image

toptensoftware avatar Apr 28 '24 00:04 toptensoftware

This would be a nice addition for extensions that use the Testing API generally - I think the vitest extension would benefit from the same - so I wonder whether this would be a tweak to the Testing API.

drk-mtr avatar May 05 '24 10:05 drk-mtr

I threw together a basic example of this here:

https://github.com/drk-mtr/nodejs-testing/pull/1/files

I've never written any production-ready code, so this is just a proof of concept and will most likely have issues.

node-test-runner-with-cause

To use it, clone, run npm install, then npm run package, then in VS Code Extensions: Install from VSIX....

I won't be working on a PR to get this in, partly because I wouldn't know how to test it, but mostly because I suspect @connor4312 won't want this PRing in. It doesn't seem to quite align with what the Diagnostics Panel in the VS Code Testing API is designed for - but I would welcome a tweak to this API that accommodates for this.

It would also be very cool if we could get formatted text in this panel, so that we can (for example) have the messages in different text to the stack traces - but I think that's also a Testing API concern not one for this library.

Worth noting - you can also see stack trace info by hovering over the red text to the right of the test title:

node-test-runner-with-cause-2

drk-mtr avatar May 06 '24 12:05 drk-mtr

Thanks so much for looking into this.

Unfortunately I just tried it, but couldn't see any noticeable difference. Even tried clocking the version number to 1.5.2 rebuilding and reinstalling. Checked I had the correct branch and your changes (buildStackPhrase was there). Same thing.

Then I loaded the project in VS Code and ran it, put a throw statement in one of the included tests and still nothing.

What might I be missing?

image

toptensoftware avatar May 07 '24 01:05 toptensoftware

Did you uninstall the real "node:test runner" extension first? I get this:

image

drk-mtr avatar May 07 '24 10:05 drk-mtr

Yes, I uninstalled the extension first.

Not sure what you mean the assert has no call stack. When I run the same test from command line I get more complete error information including the file/line number location of the exception:

image

toptensoftware avatar May 07 '24 13:05 toptensoftware

I edited my message to remove that comment as it was incorrect :)

Not sure what to suggest I'm afraid - I made the modifications on a Linux PC and installed without issue on a Windows PC today, so I'm not sure what the cause could be. I'd maybe try clearing the relevant directories from the extensions folder (~/.vscode/ on Linux) and installing again.

drk-mtr avatar May 07 '24 16:05 drk-mtr

OK, not sure went wrong yesterday but I completely uninstalled, deleted the old extension from the extension directory and reinstalled the VSIX and it's working much better today.

This is a great improvement, but there two small issues:

1. Only getting call stacks for exceptions, not asserts

It looks like the call stack/location has been captured (see far right of red error message shows "(file://....)" but I can't see the full error message with stack, just the assert diff.

image

I just noticed I can hover and get the fulll stack trace:

image

Even better would if I could click those file locations and jump to the location of the error.

2. Clicking a file:// link in the call stack doesn't work

For exceptions (not asserts) the full stack trace is shown in the error panel however clicking a link doesn't work:

eg:

image

but when I click the link it shows:

image

I'm guessing this is related to the :linenumber:pos suffix and could be a Windows or VS code issue, but thought I'd report it anyway. Maybe there's some way to reformat the link so VS Code understands it better?

toptensoftware avatar May 08 '24 00:05 toptensoftware

I want to just implement better call stack support in VS Code, tracked here 👉 https://github.com/microsoft/vscode/issues/214488

connor4312 avatar Jun 06 '24 17:06 connor4312

Shipped this in VS Code, will adopt it here this weekend.

connor4312 avatar Sep 05 '24 17:09 connor4312

Thanks for your work on this. I haven't had a chance to test this myself yet, but appreciate the effort.

toptensoftware avatar Sep 24 '24 04:09 toptensoftware