> ## Documentation Index
> Fetch the complete documentation index at: https://docs.tenderly.co/llms.txt
> Use this file to discover all available pages before exploring further.

# Локальная разработка и тестирование

> Ускорьте итерации кода Web3 Action и пишите автоматизированные тесты для функций action с помощью @tenderly/actions-test.

Для облегчения локальной разработки кода вашего [Web3 Action](/monitoring/web3-actions/introduction) вы можете использовать пакет **@tenderly/actions-test** (входит в состав tenderly-actions). Он предоставляет runtime Tenderly, позволяя запускать и тестировать ваш Web3 Action в локальном окружении.

Установите пакет [**@tenderly/actions-test**](https://github.com/Tenderly/tenderly-actions/tree/main/packages/actions-test), чтобы тестировать функции Web3 Action локально.

```bash title="example" showLineNumbers theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
yarn add --dev @tenderly/actions-test
```

<Note>
  Рекомендуется хранить тесты и скрипты запуска для web3-actions вне каталога *actions root*,
  чтобы не увеличивать размер проекта Web3 Action.
</Note>

Вы можете использовать **@tenderly/actions-test** двумя способами для поддержки процесса разработки:

* Использовать в автоматизированных тестах (**рекомендуется**).
* Создать скрипт запуска на JavaScript/TypeScript.

### Использование @tenderly/actions-test в тестах

Чтобы использовать **@tenderly/actions-test** в тестах, никаких дополнительных шагов не требуется. Импортируйте `TestRuntime` и события, необходимые для тестирования вашего Web3 Action, и проверяйте результаты.

Следующие примеры показывают, как использовать пакет для вызова Web3 Action и передачи объекта события, который ожидают функции Action. Подробнее о типах событий, которые можно передать, см. в [функциях, событиях и триггерах](/monitoring/web3-actions/references/functions-events-triggers).

### Рабочий пример

Ознакомьтесь с примером multisig-кошелька и тем, как он использует **@tenderly/actions-test** для локального запуска функции action.

<Card title="Локальный запуск функции action" href="" />

### Пример: запуск функции Action в скрипте

Следующий пример показывает файл **src/web3-actions-local/run.ts**, который запускает три actions, передавая соответствующие события. Обратите внимание, что исходный файл Web3 Actions (`src/actions/awesomeActions.ts`) находится в соседнем к содержащему скрипт каталоге:

#### Шаг 1: напишите скрипт запуска

```tsx title="example.tsx" showLineNumbers theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
// File: src/web3-actions-local/run.ts
// web3-actions sources location: src/actions/awesomeActions.ts


/*
 * Running Web3 Actions code locally.
 * TestRuntime is a helper class that allows you to run the functions,
 * and set storage and secrets before running the function
 **/
const main = async () => {
  const testRuntime = new TestRuntime();

  testRuntime.context.secrets.put('multisig.DISCORD_URL', process.env.DISCORD_URL || '');

  await testRuntime.execute(everyDay, new TestPeriodicEvent());

  await testRuntime.execute(whenDappPosts, new TestWebhookEvent({ foo: 'bar' }));

  const te = new TestTransactionEvent();
  te.to = '0x1a22...';
  te.from = '0xc023...';

  await testRuntime.execute(onTxEvent, new TransactionEvent());
};

(async () => await main())();
```

#### Шаг 2: расширьте scripts в package.json содержащего проекта.

Вы можете добавить этот скрипт в файл **package.json**.

```diff title="example" showLineNumbers theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
{
    ...
  "scripts": {
    ...
+   "local-w3a-run": "ts-node src/web3-actions-local/run.ts"
    ...
  }
  ...
}
```

#### Шаг 3: запустите скрипт

```bash title="example" showLineNumbers theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
yarn local-w3a-run
```
