connor4312 / nodejs-testing

VS Code integration for node:test native tests
MIT License
43 stars 6 forks source link

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

Open toptensoftware opened 2 months ago

toptensoftware commented 2 months ago

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

drk-mtr commented 2 months ago

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 commented 2 months ago

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

toptensoftware commented 2 months ago

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

drk-mtr commented 2 months ago

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

image

toptensoftware commented 2 months ago

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

drk-mtr commented 2 months ago

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.

toptensoftware commented 2 months ago

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?

connor4312 commented 1 month ago

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