vitest-preview icon indicating copy to clipboard operation
vitest-preview copied to clipboard

Feature: Debug with Watch

Open benguenter opened this issue 1 year ago • 2 comments

Which feature do you want to improve?

Debug should be able to watch for dom changes, so that we can put debug at the beginning of the test, and then have the latest dom represented at time of failure.

What and why you want to improve that feature

This is useful so that we don't need to move the debug statement around as the test fails. Additionally, this is useful when using things like the find* operators with testing library when it is polling for changes. Or when debugging tests.

Potential bugs/ unexpected behaviors

Possible unexpected behavior if the two modes are mixed. I.e. having this "watch debug" in one place, and then have a non-watch debug statement later on.

How to implement the changes

We could use a MutationObserver on the document element to watch for changes.

Something like this image

Others

@nvh95 is this project still active? I'd love to open a PR for this feature, but it seems like there are a few PRs that have been open for a long time.

benguenter avatar May 14 '24 16:05 benguenter

Debug should be able to watch for dom changes, so that we can put debug at the beginning of the test, and then have the latest dom represented at time of failure.

Hi @benguenter, it will be the Automatic Mode in the future release, similar to what jest-preview's Automatic Mode.

But in the meantime, you can use this setup to watch the dom changes whenever a test fails, thanks to @BrandonGoren https://github.com/nvh95/vitest-preview/issues/21#issuecomment-1487474054

import { debug } from 'vitest-preview';
import { cleanup } from '@testing-library/react';

afterEach(context => {
  // Run vitest-preview's debug if the test fails
  if (context?.meta?.result?.state === 'fail') {
    debug();
  }
  // Clean up react-testing-library. We need to manually do this because we
  // turn off the automatic teardown in the vite.config.
  // This needs to happen after vitest-preview.
  cleanup();
});

nvh95 avatar Jun 10 '24 00:06 nvh95

Another way is to call debug from the getElementError hook in the testing-library.

But if you want, you can open a PR at https://dom-preview.knappi.org/ which I developed as an alternative to vitest-preview. The setup is a little more complex though.

nknapp avatar Jun 10 '24 05:06 nknapp