# Тестирование модуля

> Юнит-, интеграционные и E2E-тесты модуля Nuxt.

Тесты помогают убедиться, что модуль ведёт себя предсказуемо в разных сценариях.

## Юнит-тесты

<tip>

Форматы юнит- и интеграционных тестов для модулей ещё обсуждаются.
<br />

 <br />

[Обсуждение в RFC](https://github.com/nuxt/nuxt/discussions/18399).

</tip>

## E2E-тесты

[Nuxt Test Utils](/docs/3.x/getting-started/testing) — основной способ E2E. Схема:

1. Nuxt-приложение-**фикстура** в `test/fixtures/*`
2. В тесте поднять Nuxt с этой фикстурой
3. Обращаться к приложению через `@nuxt/test-utils` (например `$fetch`)
4. Проверять результат (HTML, статус и т.д.)
5. Повторить для других фикстур

Фикстура:

```ts [test/fixtures/ssr/nuxt.config.ts]
// 1. Nuxt-приложение в роли «фикстуры»
import MyModule from '../../../src/module'

export default defineNuxtConfig({
  ssr: true,
  modules: [
    MyModule,
  ],
})
```

Тест:

```ts [test/rendering.ts]
import { describe, expect, it } from 'vitest'
import { fileURLToPath } from 'node:url'
import { $fetch, setup } from '@nuxt/test-utils/e2e'

describe('ssr', async () => {
  // 2. Поднять Nuxt с этой фикстурой в файле теста
  await setup({
    rootDir: fileURLToPath(new URL('./fixtures/ssr', import.meta.url)),
  })

  it('отрисовывает главную страницу', async () => {
    // 3. Работа с фикстурой через утилиты `@nuxt/test-utils`
    const html = await $fetch('/')

    // 4. Проверки для этой фикстуры
    expect(html).toContain('<div>ssr</div>')
  })
})

// 5. Повторить для других сценариев
describe('csr', async () => { /* ... */ })
```

<tip>

Пример — в [стартере модуля](https://github.com/nuxt/starter/blob/module/test/basic.test.ts).

</tip>

## Ручная проверка

**Playground** в стартере удобен при разработке ([см. раздел «Разработка»](/docs/3.x/guide/modules/getting-started#module-starter-dev)).

Вне репозитория модуля можно проверить локально: соберите tarball [`npm pack`](https://docs.npmjs.com/cli/commands/npm-pack/) (или аналог) и в тестовом проекте укажите в `package.json`: `"my-module": "file:/path/to/tarball.tgz"`, затем подключите модуль как обычно.
