TGStat
TGStat
Введите текст для поиска
Расширенный поиск каналов
  • flag Russian
    Язык сайта
    flag Russian flag English flag Uzbek
  • Вход на сайт
  • Каталог
    Каталог каналов и чатов Региональные подборки Тематические подборки Платные каналы Поиск каналов
    Добавить канал/чат
  • Рейтинги
    Рейтинг каналов Рейтинг чатов Рейтинг публикаций
    Рейтинги брендов и персон
  • Аналитика
  • Поиск по публикациям
  • Мониторинг Telegram
  • Продвижение
    Реклама через Яндекс Бизнес Реклама в каналах через TGStat Agency Реклама на сайте TGStat.ru
Из Solidity в AI и дальше

6 Nov 2023, 12:27

Открыть в Telegram Поделиться Пожаловаться

Foundry с 0. Часть 16

Думал тему из этого поста постепенно поднимать в нескольких других, но понял, что лучше основную идею изложить сейчас, а потом уже дополнять при необходимости.

А поговорим мы о работе с консолью: вызовом тестов и логированием из них.

Из предыдущих постов мы узнали, для того чтобы вызвать процесс тестирования нашего контракта, достаточно в консоли прописать:

forge test

или

forge test -vv

и других "-v..." для более подробной информации.

Тем не менее, порой, когда тестовых контрактов и самих тестов очень много, нам нужно вызвать что-то конкретное, и ждать выполнения всех тестов из всех контрактов может стоит нам времени.

Для этого существуют удобные дополнения к команде test:

1. forge test --match-test testName

Выполним конкретный тест из контрактов.

2. forge test --match-contract contractName

Выполним все тесты из конкретного контракта.

3. forge test --match-path Path

Выполнить тесты по указанному пути.

Так же мы может исключить какой-нибудь контракт или тест из процесса тестирования с помощью опций:

--no-match-test
--no-match-contract
--no-match-path


Более того, с помощью таких опций-хелперов мы можем подключать optimizer и указывать количество проходов:

--optimize
--optimizer-runs
--via-ir


Или указать EVM версию для наших тестов:

--evm-version

Как вы, надеюсь, поняли, перед опцией должно быть forge test, а после указание на файл / тест / версию и так далее.

Но, что самое интересное, эти команды можно комбинировать для точечных тестов, например:

forge test --match-contract myContract --match-test myTest --evm-version london

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

Все опции для тестов можно посмотреть тут:

https://book.getfoundry.sh/reference/forge/forge-test

Теперь пара слов о логировании в тестах.

Порой нам нужно будет выводить значения из наших тестов, чтобы узнать, кто был вызывающим функции, изменение баланса или результат деления. Для этого мы можем просто написать:

console.log(param);

Однако, если таких вызовов много в ходе выполнения теста, то можно очень просто потеряться в них. Поэтому предлагаю вам пару способов для удобного вывода информации.

1. Подписывать логи:

console.log("This is owner: ", contract.owner());

Будет так:

Logs:
This is owner: 0x00c7bF7d9E7D071Df3B53dEec96cD4bf0f6c0220


2. Разделять по строкам:

console.log("This is owner");
console.log(contract.owner());

Будет так:

Logs:
This is owner
0x00c7bF7d9E7D071Df3B53dEec96cD4bf0f6c0220


3. Выделять дефисами:

console.log("This is owner ----------- ", contract.owner());

Будет так:

Logs:
This is owner ---------- 0x00c7bF7d9E7D071Df3B53dEec96cD4bf0f6c0220


4. Оставлять пробелы, используя пустые логи:

console.log(" ");

5. Выделять разным цветом.

Для этого потребуется в импорте тестов добавить библиотеку StdStyle:

import {Test, console, StdStyle} from "forge-std/Test.sol";

После этого можно применять цвета к логам:

console.log("Owner: ", StdStyle.yellow(counter.owner()));

Стилей достаточно много: красный, зеленый, желтый, синий, мажента, голубой, жирный, приглушенный, курсив, зачеркнутый и обычный.

Попробуйте сами, так наглядность логов в ваших тестах станет еще лучше!

#foundry #lesson16

514 0 1 1 7
Каталог
Каталог каналов и чатов Подборки каналов Поиск каналов Добавить канал/чат
Рейтинги
Рейтинг каналов Telegram Рейтинг чатов Telegram Рейтинг публикаций Рейтинги брендов и персон
API
API статистики API поиска публикаций API Callback
Наши каналы
@TGStat @TGStat_Chat @telepulse @TGStatAPI
Почитать
Академия TGStat Исследование Telegram 2019 Исследование Telegram 2021 Исследование Telegram 2023
Контакты
Справочный центр Поддержка Почта Вакансии
Всякая всячина
Пользовательское соглашение Политика конфиденциальности Публичная оферта
Наши боты
@TGStat_Bot @SearcheeBot @TGAlertsBot @tg_analytics_bot @TGStatChatBot