kobaltedev / kobalte

A UI toolkit for building accessible web apps and design systems with SolidJS.
https://kobalte.dev
MIT License
1.29k stars 73 forks source link

Popover opens in the browser but not in testing #254

Open nsaritzky opened 1 year ago

nsaritzky commented 1 year ago

Describe the bug The Popover element renders correctly and opens in the browser, but it fails to open when using vitest and testing-library.

To Reproduce See this repo for a reproduction. I made it by taking the following steps:

  1. Create a new solid-js project
  2. Install Kobalte, vitest, @solid-js/testing-library, @testing-library/jest-dom, @testing-library/user-event, add vitest.config.ts.
  3. Add a simple Popover to App.tsx:
    
    import logo from "./logo.svg";
    import styles from "./App.module.css";

const App: Component = () => { return (

open
hello

); };

export default App;

4. Add a `App.test.tsx` file with the following:
```TSX
import { render, screen } from "@solidjs/testing-library";
import userEvent from "@testing-library/user-event";
import { test, expect, beforeEach } from "vitest";
import "@testing-library/jest-dom";

import App from "./App";

test("Clicking 'open' sets aria-expanded to true", async () => {
  const user = userEvent.setup();
  render(() => <App />);
  const open = screen.getByRole("button", { name: "open" });
  await user.click(open);
  expect(open).toHaveAttribute("aria-expanded", "true");
});

test("Clicking 'open' opens a dialog", async () => {
  const user = userEvent.setup();
  render(() => <App />);
  const open = screen.getByRole("button", { name: "open" });
  await user.click(open);
  expect(screen.getByRole("dialog"));
});

Expected behavior The popover opens in the browser and the tests pass. Instead, the tests fail on their expect lines.

Desktop (please complete the following information):

gBasil commented 7 months ago

I'm running into the same issue. Calling the debug() function prints out the HTML as expected with the popover open, but queries don't return the popover contents.