Writing unit tests in #Nuxt can quickly get messy. You start mocking everything, dealing with flaky tests, and wondering "am I even testing this the right way?" 🫠
Over time I came up with some simple practices that keep my tests clean.
Sharing them here, maybe some of these will make your project life easier too ✌️
Mock Nuxt specifics👍
Without this, tests crash. Nuxt has its own injections
Isolate network🌐
Tests should never hit the real API
Use Pinia Testing👩💻
Test stores without a real backend
Put logic into composables📁
Functions are easier to test than components
Stable selectors🫵
Test edge cases🤔
Always check empty data, errors, large values
Control async😎
Keeps your test stable, not flaky
Mock plugins & i18n🎭
Replace t and everything just works
Keep tests small🤏
One test = one idea
Also i do suggest you to keep track of you coverage and make as big as possible👜
Over time I came up with some simple practices that keep my tests clean.
Sharing them here, maybe some of these will make your project life easier too ✌️
Mock Nuxt specifics
vi.mock('#app', () => ({
useRuntimeConfig: () => ({ public: { apiBase: 'http://fake' } }),
useFetch: vi.fn().mockResolvedValue({ data: { message: 'ok' } })
}));Without this, tests crash. Nuxt has its own injections
Isolate network
(useFetch as any).mockResolvedValue({
data: { message: 'Mocked response' },
pending: false,
error: null
});Tests should never hit the real API
Use Pinia Testing
import { createTestingPinia } from '@pinia/testing';
mount(MyComponent, { global: { plugins: [createTestingPinia()] } });Test stores without a real backend
Put logic into composables
// composables/useSum.ts
export const useSum = (a:number,b:number)=>a+b;
// useSum.spec.ts
expect(useSum(2,3)).toBe(5);
Functions are easier to test than components
Stable selectors
<!-- Button.vue -->
<button data-test="submit-btn">Send</button>
expect(wrapper.get('[data-test="submit-btn"]').text()).toBe('Send');data-test is reliable even if CSS classes change.Test edge cases
expect(formatMoney(0)).toBe('$0.00');Always check empty data, errors, large values
Control async
await nextTick();
vi.useFakeTimers();
Keeps your test stable, not flaky
Mock plugins & i18n
vi.mock('vue-i18n', () => ({
useI18n: () => ({ t: (key:string)=>key })
}));Replace t and everything just works
Keep tests small
it('adds todo', ()=>{ store.add('task'); expect(store.items.length).toBe(1); });
it('toggles todo', ()=>{ store.toggle(1); expect(store.items[0].done).toBe(true); });One test = one idea
Also i do suggest you to keep track of you coverage and make as big as possible
Please open Telegram to view this post
VIEW IN TELEGRAM
1
Forwarded from Memolink
Nega Memolink kerak? 🤔
Bugun bizning barcha xotiralarimiz 📸 telefon galereyasida, 📂 Google Drive’da yoki turli ijtimoiy tarmoqlarda tarqalib ketgan. Vaqt o‘tishi bilan ular yo‘qoladi, linklar ishlamay qoladi yoki oddiygina unutiladi.
Eng qizig‘i, odamlar bir voqeani eslar ekan, uning 60% tafsilotlarini bir necha yil ichida unutadi. Demak, suratlar va videolar saqlansa ham, ular ortidagi his-tuyg‘u asta-sekin yo‘qolib boradi.
Memolink shu muammoni hal qilish uchun yaratilmoqda.
📍 Siz xotiralarni joyga bog‘lab qoldirasiz.
✨ AR kapsulalar orqali esa ularni qayta his qilish imkoniga ega bo‘lasiz.
#Memolink #Xotira #Innovatsiya #AR #FutureTech #uzbekistan #nuqta
Bugun bizning barcha xotiralarimiz 📸 telefon galereyasida, 📂 Google Drive’da yoki turli ijtimoiy tarmoqlarda tarqalib ketgan. Vaqt o‘tishi bilan ular yo‘qoladi, linklar ishlamay qoladi yoki oddiygina unutiladi.
Eng qizig‘i, odamlar bir voqeani eslar ekan, uning 60% tafsilotlarini bir necha yil ichida unutadi. Demak, suratlar va videolar saqlansa ham, ular ortidagi his-tuyg‘u asta-sekin yo‘qolib boradi.
Memolink shu muammoni hal qilish uchun yaratilmoqda.
📍 Siz xotiralarni joyga bog‘lab qoldirasiz.
✨ AR kapsulalar orqali esa ularni qayta his qilish imkoniga ega bo‘lasiz.
#Memolink #Xotira #Innovatsiya #AR #FutureTech #uzbekistan #nuqta
Заметки начинающего разработчика
Войти в IT – это как начать новую игру на максимальной сложности. Квест, где куча дверей и ноль инструкций. Вот мои заметки. Думаю, многие себя узнают)
Ошибки – это не катастрофа✍️
Красные строки в терминале? Раньше я их не читал полностью и сразу пытался исправить. Но в большинстве случаев достаточно хорошенько прочитать ошибку
Гугл(ну и LLM`ы) как второй мозг🧠
Навык "правильно искать"(друг так на работу устроился) иногда важнее, чем "всё знать"(это нереально). Почти каждый ответ уже где-то есть – главное задать вопрос так, чтобы поисковик или LLM поняли.
Копипаст – это инструмент 🛠
Скопировал чужое решение или вставил сгенерированный код? Это нормально. Главное – разобраться, почему оно работает. Со временем твой код тоже будут копипастить другие.
Технологий слишком много🤯
Фреймворки, библиотеки, языки… сначала хочется выучить все сразу. Но секрет простой: возьми одну технологию и сделай в ней что-то до конца и от души. Это даст уверенность.
Магия перезапуска 🧙
Иногда достаточно перезапустить сервер, почистить кеш или просто закрыть и открыть проект. Половина проблем решается "шаманством" 😂
Никто не родился с опытом🤔
Те, кто сейчас щёлкают задачи одной рукой, когда-то тоже сидели и не понимали, почему эта кнопка не кликается...
Войти в IT – это как начать новую игру на максимальной сложности. Квест, где куча дверей и ноль инструкций. Вот мои заметки. Думаю, многие себя узнают)
Ошибки – это не катастрофа
Красные строки в терминале? Раньше я их не читал полностью и сразу пытался исправить. Но в большинстве случаев достаточно хорошенько прочитать ошибку
Гугл(ну и LLM`ы) как второй мозг
Навык "правильно искать"(друг так на работу устроился) иногда важнее, чем "всё знать"(это нереально). Почти каждый ответ уже где-то есть – главное задать вопрос так, чтобы поисковик или LLM поняли.
Копипаст – это инструмент 🛠
Скопировал чужое решение или вставил сгенерированный код? Это нормально. Главное – разобраться, почему оно работает. Со временем твой код тоже будут копипастить другие.
Технологий слишком много
Фреймворки, библиотеки, языки… сначала хочется выучить все сразу. Но секрет простой: возьми одну технологию и сделай в ней что-то до конца и от души. Это даст уверенность.
Магия перезапуска 🧙
Иногда достаточно перезапустить сервер, почистить кеш или просто закрыть и открыть проект. Половина проблем решается "шаманством" 😂
Никто не родился с опытом
Те, кто сейчас щёлкают задачи одной рукой, когда-то тоже сидели и не понимали, почему эта кнопка не кликается...
Please open Telegram to view this post
VIEW IN TELEGRAM
5 2 2
Вот и началось
Теперь приложения начинают "подключаться" к LLM моделям
Open AI сделали APP SDK, с помощью которого можно подключить свое приложение и при общении в чате можно будет вызвать приложение.
Сейчас доступны партнерские приложения: booking, canva, coursera, figma, spotify
Мне понравился пример с фигмой, всегда хотелось на бумажке накидать диаграмы и перевести в цифровой вариант🥹
Open AI сделали APP SDK, с помощью которого можно подключить свое приложение и при общении в чате можно будет вызвать приложение.
Сейчас доступны партнерские приложения: booking, canva, coursera, figma, spotify
Мне понравился пример с фигмой, всегда хотелось на бумажке накидать диаграмы и перевести в цифровой вариант
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
А еще из имбы
Agent builder
Теперь нейрорабов-помощников можно будет собирать как конструктор :) и эти помощники могут забрать рутинные задачи: работа с почтой, создание отчетов, резюме встреч и тд
а теперь представим комбо из предыдущего поста и этих агентов. Например, написать прям в тг чат: "собери все пуллы готовые к мерджу, сделай релиз ноут и после моего апрува - релиз"🤔
Agent builder
Теперь нейро
а теперь представим комбо из предыдущего поста и этих агентов. Например, написать прям в тг чат: "собери все пуллы готовые к мерджу, сделай релиз ноут и после моего апрува - релиз"
Please open Telegram to view this post
VIEW IN TELEGRAM
GitHub Contributions Analyzer
Создал небольшой скрипт, который автоматически анализирует вклад юзера в github репозиториях и генерирует красивый отчет в формате Markdown.
Что умеет
- Подсчитывает коммиты за указанный период
- Считает созданные Pull Request'ы
- Отслеживает принятые PR (merged)
- Анализирует ваши ревью кода
- Генерирует таблицу по всем репозиториям
- Сохраняет отчет в файл
Идеально для
- Подготовки отчетов для менеджера📁
- Анализа активности команды📊
- Личной статистики разработчика🤔
- Составления резюме📝
Кому интересно, ссылка
#github #javascript #opensource #devtool
Создал небольшой скрипт, который автоматически анализирует вклад юзера в github репозиториях и генерирует красивый отчет в формате Markdown.
Что умеет
- Подсчитывает коммиты за указанный период
- Считает созданные Pull Request'ы
- Отслеживает принятые PR (merged)
- Анализирует ваши ревью кода
- Генерирует таблицу по всем репозиториям
- Сохраняет отчет в файл
contributions.mdИдеально для
- Подготовки отчетов для менеджера
- Анализа активности команды
- Личной статистики разработчика
- Составления резюме
Кому интересно, ссылка
#github #javascript #opensource #devtool
Please open Telegram to view this post
VIEW IN TELEGRAM
GitHub
GitHub - mj11rock/gh-contribute: Counts commints, PRs, merges and reviews across repos for a specified date range
Counts commints, PRs, merges and reviews across repos for a specified date range - mj11rock/gh-contribute
11 4
вышла новая версия чат гпт 5.2
и дали еще гайд как писать промпты для новой модели. будем тестировать сегодня)
и дали еще гайд как писать промпты для новой модели. будем тестировать сегодня)
Ждали первое место, но и второе место для второго хакатона - найс 🌚
Please open Telegram to view this post
VIEW IN TELEGRAM
1 9
меня упомянули в repost.uz ⌨️
По словам лид-разработчика Исломбека Салимова, решение, MVP которого создали за неделю, упрощает работу врачей с документацией и помогает в анализе медицинских данных.
Please open Telegram to view this post
VIEW IN TELEGRAM
Repost.uz
Agrobank провел хакатон с призовым фондом в 500 млн сумов
За победу в финале боролись 50 команд, представивших ИИ-решения для агросектора и финтеха.
1 9
Подводим итог с Chat GPT
хоть где-то я топ 1% 😂
можно попробовать тут(через браузер): https://chatgpt.com/?hints=connector%3Aconnector_openai_cocoon&prompt=my+year+with+chatgpt
хоть где-то я топ 1% 😂
можно попробовать тут(через браузер): https://chatgpt.com/?hints=connector%3Aconnector_openai_cocoon&prompt=my+year+with+chatgpt
Увидел интересный PullRequest в популярном CSS-фреймворке Tailwind.
Он сам бесплатный, но есть платные шаблоны и готовые компоненты на основе этого фреймворка и своя поддержка. На этом их команда зарабатывает.
В пулле реализовали идею, где на отдельной странице
И вот в пулле авторов прямо пишет, что из-за ИИ люди и так перестали заходить к ним на сайт и брать платные решения и эту идею они не хотят сейчас принимать. Итог: Выручка просела на 80%, трафик на документацию упал на 40%, 75% из команды инженеров потеряли работу🫡
Такие вот дела...
Он сам бесплатный, но есть платные шаблоны и готовые компоненты на основе этого фреймворка и своя поддержка. На этом их команда зарабатывает.
В пулле реализовали идею, где на отдельной странице
/llm.txt будет одна большая текстовая страница всей документации, к который должны будут подключаться LLM и кодинг агенты и быстрее находить нужную информацию.И вот в пулле авторов прямо пишет, что из-за ИИ люди и так перестали заходить к ним на сайт и брать платные решения и эту идею они не хотят сейчас принимать. Итог: Выручка просела на 80%, трафик на документацию упал на 40%, 75% из команды инженеров потеряли работу
Такие вот дела...
Please open Telegram to view this post
VIEW IN TELEGRAM
GitHub
feat: add llms.txt endpoint for LLM-optimized documentation by quantizor · Pull Request #2388 · tailwindlabs/tailwindcss.com
Add /llms.txt endpoint that serves a concatenated, text-only version of all Tailwind CSS documentation pages optimized for Large Language Model consumption.
Extract text from MDX files, removing J...
Extract text from MDX files, removing J...
Последние пару недель пилим интересный проект — встраиваемые виджеты. И хотел бы поделиться архитектурными решениями.
Что строим?
Два встраиваемых виджета с одним общим ядром, которое они переиспользуют
Решения
Решил вспомнить универские годы, когда все пытались делать по книжке и красиво. И вот к чему пришли.
1. Vanilla JS, без фреймворков 🌚 Зачему?
- BundleSize: 125KB
- 0 конфликтов с хостом
- Встаривается через
2. Finite State Machine
Всегда одно явное глобавльное состояние у виджета.
3. Event-Driven
Компоненты общаются через события. Слабая связанность и легко тестировать
4. Также, спасибо ИИшкам, учли
- XSS защиту
- Sanitization
- Валидацию инпутов
Из минусов:
- Надо было изначально писать все на TS, чтобы много где не прописывать типы через JSDoc
- Используется long-polling(бек заставил)
- Многа строк у основных виджетов(из-за JSDoc :( )
- Заметил сложность с локализацией(пока думаю как лучше сделать)
#javascript #architecture #webdev
Что строим?
Два встраиваемых виджета с одним общим ядром, которое они переиспользуют
Решения
Решил вспомнить универские годы, когда все пытались делать по книжке и красиво. И вот к чему пришли.
1. Vanilla JS, без фреймворков 🌚 Зачему?
- BundleSize: 125KB
- 0 конфликтов с хостом
- Встаривается через
<script>2. Finite State Machine
Всегда одно явное глобавльное состояние у виджета.
3. Event-Driven
Компоненты общаются через события. Слабая связанность и легко тестировать
4. Также, спасибо ИИшкам, учли
- XSS защиту
- Sanitization
- Валидацию инпутов
Из минусов:
- Надо было изначально писать все на TS, чтобы много где не прописывать типы через JSDoc
- Используется long-polling(бек заставил)
- Многа строк у основных виджетов(из-за JSDoc :( )
- Заметил сложность с локализацией(пока думаю как лучше сделать)
#javascript #architecture #webdev
1👍5