# Testing

Source: https://signy.dev/documentation/1/application/testing/

Synchronous checks with flushAll().

## flushAll()

Templates and control flow render synchronously, so the DOM is complete right after `mount()`. Updates after a signal write apply in a microtask. In a test, call `flushAll()` after a write to run them at once.

```js
import { application, flushAll } from 'signy';

test('counts clicks', () => {
  const root = document.createElement('div');
  const app = application(Counter).mount(root);

  root.querySelector('button').click();
  flushAll();

  expect(root.textContent).toContain('Clicked 1 times');
  app.unmount();
});
```

## Async work

For loaders, lazy imports and resources, wait for pending promises first, then call `flushAll()`.

```js
await new Promise((resolve) => setTimeout(resolve));
flushAll();
```

## Router

`memoryRouter()` keeps history in memory and takes the starting entries.

```js
const testRouter = memoryRouter({ routes, initialEntries: ['/users/42'] });
application(Layout).use(testRouter).mount(root);
```
