Found 99 bookmarks
Custom sorting
Test Assertion Styles in JavaScript
Test Assertion Styles in JavaScript

Короткая заметка про разные стили работы тестовых фреймворков в JS (в целом актуально и не только для JS)

Есть 2 типа тестовых тулзов: spec и tap. Spec - это когда мы тесты обозначаем специальной функцией и когда она выкидывает исключение - мы считаем что тест упал. Если же исключение не было выкинуто - тест прошел. Tap - это когда есть специальное API для проверок и проверки либо проходят либо нет.

Типичный пример в spec-подходе:

describe('account', () => { it('has a balance of zero when first created', () => { // if this throws, the test fails expect(new Account().balance).to.equal(0) }) it('has an empty list of initial addresses', () => { expect(new Account().addresses).to.match([]) }) })

Типичный пример в tap-подходе: t.test('account', async t => { const a = new Account() t.equal(a.balance, 0, 'balance of zero when first created') t.match(a.addresses, [], 'empty list of addresses') t.test('credits', async t => { a.credit(100) t.equal(a.balance, -100, 'negative balance after credit') a.debit(200) t.equal(a.balance, 100, 'positive balance after debit') }) })

В первом сниппете кода границы тесты - это describe и it.

Во втором же сниппете используется объект t, который умеет делать проверки и композировать их через test. При этом "тестов" в привычном понимании там нет, только проверки. Минимальный tap тест выглядит так t.ok(cond, message)

То есть, разница подходов - разница в абстракции, вокруг которых они крутятся. Для spec - это тесты, для tap - проверки.

Автор также указывает на разницу, что в spec-подходе it и describe определяются тест-ранером (а значит нельзя запустить тесты на чисто nodejs) и обязательно нужно выделять describe => it, но, кажется что в реальности это не так (т.к. все таки есть тулы, где эти функции нужно импортировать явно, а тесты могут запускаться без отдельного тест-ранера)

·blog.izs.me·
Test Assertion Styles in JavaScript
A compilation of outstanding testing articles (with JavaScript)
A compilation of outstanding testing articles (with JavaScript)

Подборка статей про автоматическое тестирование от консультанта в этой сфере. Подборка содержит 10 статей, обязательных к прочтению (по мнению автора) + 10 ссылок на полезные материалы

Список статей весьма хороший. Часть из них я уже читал (и вероятно они даже есть где-то в этом канале), часть, видимо, прочту в скором времени

Рекомендую к ознакомлению

·practica.dev·
A compilation of outstanding testing articles (with JavaScript)
Testing the dark scenarios of your Node.js application
Testing the dark scenarios of your Node.js application
Обычно nodejs разработчики пишут авто-тесты на функционал: обрабатывают позитивные и негативные сценарии работы логики. Однако разработчики часто забывают про простые тесты, которые проверяют работу приложения вне конкретной функциональности В статье описываются, какие простые и короткие тесты стоит писать на любое node.js приложение. Хотя в целом это касается не только node.js, но эта статья посвящена именно node.js и есть несколько специфичных кейсов Какие тесты следует писать: - The zombie process test: проверка, что приложение закрывает текущий процесс, если случилось что-то непредвиденное. Если приложение не убивает свой процесс в случае, когда оно не смогло инициализироваться, то может сложится ложное впечатление, что приложение работает (процесс то запущен), когда оно не смогло стартовать - The observability test: проверка, на то что ошибки корректно уходят в логгер - The 'unexpected visitor' test - проверка на обработку непойманных исключений (`uncaughtException`) - The 'hidden effect' test - мы часто проверяем, что в случае успеха мы делаем какой-то сайдэффект (например, записываем данные в БД), но мы часто упускаем проверку, что в случае неуспеха мы НЕ выполняем этот сайдэффект - The 'overdoing' test - проверка, что функционал не делает лишний сайдэффект. Очень близко к предыдущему кейсу, но немного про другое: проверка, что в случае успеха, делаются только нужные сайдэффекты, а ненужные - не делаются - The 'slow collaborator' test - обработка таймаутов - The 'poisoned message' test - проверка на обработку "сломанной" структуры данных. Часто мы предполагаем, что у нас есть контракт и все ему следуют, но что если это не так? - Test the package as a consumer - мы пишем юнит-тесты на свои npm-пакеты, но это не гарантирует нам, что у пользователя все будет работать корректно. Например, мы можем криво сконфигурировать сборку. Поэтому следует проверять работу пакета с точки зрения пользователя - делая импорт пакета или вызывая его cli - The 'broken contract' test - еще 1 тест на сломанный контракт. Когда я описывал "poisoned message" я сразу поднял уровень абстракции до сломанного контракта. Эти 2 пункта про сломанный контракт, но немного различны в нюансах (там - про сообщения из шины событий, здесь - про доверие OpenAPI спеке)
·practica.dev·
Testing the dark scenarios of your Node.js application
Dependency Composition
Dependency Composition
Очень хорошая статья в блоге Мартина Фаулера одновременно про проектирование через TDD и выделение зависимостей в коде без фреймворков. Код написан на typescript (все чаще в блоге Мартина Фаулера фигурирует код на javascript или typescript) Автор пытается решить следующую историю: пользователь хочет получить список лучших ресторанов, по мнению других пользователей. Автор последовательно, без фреймворков и следуя TDD, по немногу заводит сущности и сразу проектирует, как они должны друг с другом взаимодействовать. Сначала описывает верхнеуровневые детали, затем по-немногу погружается в домен и описывает зависимости, необходимые бизнес-логике для работы. Также автор следует бест-практисам, разделяя инфраструктурный код и бизнес-логику приложения. Код, который ищет лучшие рестораны, не знает ни о HTTP, ни о базах данных. Очень интересна реализация DI - автор просто берет и примяеняет Partial Application в создании хендлера запроса, в который кидаются зависимости (например, функция получения списка ресторанов) и которая возвращает обработчик запроса. Статья очень хороша по следующим причинам: - Очень хорошо объясняется, как применять прицнипы чистой архитектуры при проектировании сервиса - Очень хорошо объясняется, как использовать TDD при проектировании сервиса и его зависимостей - Автор не задается вопросом, а какой способ делать DI (pure, IoC container, etc) или какая библиотека для DI лучше - он его просто делает. В Javascript есть возможность применять Partial Application - этого УЖЕ достаточно для реализации DI - Объясняются концепции хорошего кода Рекомендую к прочтению
·martinfowler.com·
Dependency Composition
Trying Node.js Test Runner
Trying Node.js Test Runner
Хороший обзор нового встроенного в nodejs test runner'а. В обзора сравниванются функциональные возможности ранера по сравнению с существующими. В целом, node:test выглядит достаточно неплохо: - Есть watch режим - Можно приладить кастомные репортеры, которые умеют обрабатывать Tap репорт - Есть базовые асерты, но вывод ошибок в консоль неудобен. Ошибка есть, но где именно разница - непонятно. - Есть возможность распаралеллить тесты в рамках 1го файла. - Есть функционал для мокирования. Как функций так и целых модулей - Есть возможность указать отдельный лоадер для запуска, например, ts файлов - Немного странное решение с выполнением определенных тестов через `only` - по умолчанию раннер игнорирует эту опцию и учитывает её только с определенным флагом. Это расходится с уже устоявшимся паттерном "если в файле есть only - то только они и запускаются, на прекомите запрещаем комитить only" - Есть сбор code coveraage В общем, выглядит достаточно неплохо и не требует установки кучи пакетов, что уже плюс.
·glebbahmutov.com·
Trying Node.js Test Runner
Make Your React Tests Easier to Write, Understand and Maintain
Make Your React Tests Easier to Write, Understand and Maintain
Статья про то, как отделить реализацию тестов на компонент от реализации самих компонентов. Автор предлагает делать отдельный API для тестов, который инкапсулирует в себе взаимодействие с компонентом. Вообще такой паттерн уже есть и называется Page Object (название, победившее все другие варианты в далеких 200х годах), но автор зачем-то вводит новое понятие Component Object Model (далее COM), который полностью повторяет смысл. На примере простого компонента, который нужно протестировать, автор вводит для него COM описывающий, как взаимодействовать с компонентом (заполнять форму) и как получать его текущее состояние (например, текст с верстки) Это удобно по нескольким причинам: - Изменения в коде приложения не влияют на код тестов. Максимум, что потребуется поменять - код COM. Это достигается тем, что COM инкапсулирует в себе знания о реализации компонента - Код тестов читается легче. Вместо "кликни на кнопку с селектором таким-то" в коде теста видно "отправь форму" - COM может быть переиспользован между разными тестами У меня про это даже доклад был на одной из конференций, но я это называл просто Page Object. Мы в проекте активно использовали эти абстракции. В идеале, один интерфейс Page Object может быть использован и для браузерных тестов и для тестов на jsdom. В более идеальном случае Page Object можно написать единый для двух видов тестов (однако тут есть свои требования к стеку и, возможно, есть ограничения, которых я не вижу). В целом идея делать удобное API для тестирования функционала - это правильно. Даже в обычных юнит-тестах разработчики, когда им надоедает писать один и тот же бойлерплейт, выносят внутренние тестовые утилки. Иногда даже идут дальше - готовят кастомные асерты. Но обычно всем лень сделать шаг дальше - выделять API для тестирования субъекта, которое сделает тесты читаемыми, защитит тесты от рефакторинга и сделает создание тестов более легким. Статью рекомендую к прочтению т.к. она очень коротко и ясно показывает плюсы создания Page Object.
·itnext.io·
Make Your React Tests Easier to Write, Understand and Maintain
Using Github Copilot for unit testing
Using Github Copilot for unit testing
В статье описывается, как с помощью Copilot писать юнит-тесты. Пример достаточно простой, но тем не менее выглядит впечатляюще. Автор покрывает тестами простую чистую функцию. Автор описывает название сценария, а сам код теста описывает Copilot. Copilot понимает, что от него хотят и генерирует корректный jest-код. При этом автор сначала описал тесты с помощью coplilot, а только потом пошел делать реализацию.
·strictmode.io·
Using Github Copilot for unit testing
Code coverage with Storybook test runner
Code coverage with Storybook test runner
Сначала storybook добавили для историй поле play, в которое можно складывать необходимые взаимодействия с компонентом Потом они добавили возможность писать там асерты и использовать истории как тесты Теперь же выходит статья про то, как собирать test coverage с этих тестов. В общем-то по ссылке доступна очень короткая инструкция про сбор test coverage у storybook тестов. Достаточно интересная возможность. Радует, что команда развивает storybook не только как песочницу или витрину для компонентов, но и как инструмент тестирования. О том что storybook - инструмент тестирования в первую очередь, я говорил на своих докладах последние пару лет. Но теперь storybook сам делает удобное API для тестирования и костылить что-то самому нужно намного реже.
·storybook.js.org·
Code coverage with Storybook test runner
HTTP Testing with Hurl in node.js
HTTP Testing with Hurl in node.js
Статья про hurl - инструмент на rust для тестирования http серверов. Hurl позволяет писать тесты вида: - сделай запрос - проверь его заголовки - сделай дополнительный запрос - проверь его Автор приводит в плюс скорость его работы, хотя я пока не сталкивался с ситуацией, чтобы тестирование через http-запросы было медленным. Также автор говорит, что его студентам было легче писать тесты, используя hurl. В целом выглядит интересно и стоит запомнить, что есть вот такой инструмент для тестирования, который подходит для интеграционного тестирования и контрактного тестирования. Пример теста на hurl ``` # 1. Get the GitHub user info for @Orange-OpenSource GET https://api.github.com/users/Orange-OpenSource # 2. We expect to get back an HTTP/2 200 response. Also, assert # various things about the Headers and JSON body. Finally # capture the value of the `blog` property from the body into # a variable, so we can use that in the next step. HTTP/2 200 [Asserts] header "access-control-allow-origin" == "*" jsonpath "$.login" == "Orange-OpenSource" jsonpath "$.public_repos" = 286 jsonpath "$.folowers" isInteger jsonpath "$.node_id" matches /^[A-Za-z0-9=]+$/ [Captures] blog_url: jsonpath "$.blog" # 3. Get the blog URL we received earlier, GET it, and make # sure it's an HTML page GET {{blog_url}} HTTP/2 200 [Asserts] header "Content-Type" startsWith "text/html" ```
·blog.humphd.org·
HTTP Testing with Hurl in node.js
What Cypress E2E testing has taught us about our code
What Cypress E2E testing has taught us about our code
Статья, рассказывающая про опыт использования cypress для написание е2е-тестов, а конкретно про проблемы, с которыми столкнулась команда и как она их решала и, заодно, делала продукт лучше в плане доступности
·dev.to·
What Cypress E2E testing has taught us about our code
Release v1.22.0 · microsoft/playwright
Release v1.22.0 · microsoft/playwright
Вышел playwright 1.22 в котором добавили супер крутую фичу - возможность тестировать компоненты в playwright. Если вы следите за cypress, то у них давно был описан концепт вида "просто импортируй в код файл компонента, отрендери его и пользуйся cypress для тестирования компонента". Сейчас, если я правильно помню, этот концепт находится в бете. И вот playwright реализует ту же самую идею у себя. Но, в отличии от cypress - playwright более низкоуровневый и быстрый (мое имхо) инструмент. Возможность, пока что, добавлена как экспериментальная. Мое мнение, что тестирование вида - импортируем компонент, рендерим его в браузере, взаимодействуем с ним - это очень крутая схема, если удасться добиться стабильности и большой скорости работы таких тестов.
·github.com·
Release v1.22.0 · microsoft/playwright
GitHub - nvh95/jest-preview: Debug your Jest tests. Effortlessly.🛠🖼
GitHub - nvh95/jest-preview: Debug your Jest tests. Effortlessly.🛠🖼
Если вы когда-нибудь писали тесты на jest с применением jsdom, то, вероятно, вы знаете, что это и очень крутой способ для написания тестов т.к. мы можем проверить что компоненты работают т.к. мы от них хотим, но с другой стороны это отличный, модный, навороченный дробовик для выстрела себе в ногу. Не редка ситуация, когда, казалось бы, на написание простого тест вида "выбери значение в селекте из нашего ui-kit" нужно потратить 2-4 часа. А потом при изменениях в функционале тест падает и не разобрать, почему он упал. Да и дебажить неудобно. Часть этих проблем может снять jest-preview. Библиотека отрисовывает в браузере ту верстку, которую вы пытаетесь протестировать в jest-тесте. Выглядит круто. Из коробки поддержка react + react-testing-library, но обещают что должны работать любые фреймворки.
·github.com·
GitHub - nvh95/jest-preview: Debug your Jest tests. Effortlessly.🛠🖼
Test component interactions with Storybook
Test component interactions with Storybook
Storybook в прошлых блог-постах рассказывали про то, что они добавили в свои истории возможность взаимодействовать с компонентами, используя testing-library в своействе истории play Теперь же они пошли еще дальше и: - добавили возможность писать асерты в блоке play - теперь можно запускать play-блоки как авто-тесты. Для этого под капотом используется playwright и jest. - добавили панель взаимодействия, где можно наблюдать, как блок play буквально по-шагово взаимодействует с историей Выглядит очень круто и как раз этого не хватало storybook для полного закрытия потребности в юнит-тестировании компонентов. Не уверен, что текущая реализация будет идеальной. Но направление верное.
·storybook.js.org·
Test component interactions with Storybook
GitHub - goldbergyoni/javascript-testing-best-practices: 📗🌐 🚢 Comprehensive and exhaustive JavaScript & Node.js testing best practices (February 2022)
GitHub - goldbergyoni/javascript-testing-best-practices: 📗🌐 🚢 Comprehensive and exhaustive JavaScript & Node.js testing best practices (February 2022)
Очень хороший список бест-практисов для автоматического тестирования на JS. Рекомендую.
·github.com·
GitHub - goldbergyoni/javascript-testing-best-practices: 📗🌐 🚢 Comprehensive and exhaustive JavaScript & Node.js testing best practices (February 2022)
A Built-in Test Runner Is Coming to Node and Why You Should Care
A Built-in Test Runner Is Coming to Node and Why You Should Care
Важная новость. В NodeJS решили сделать свой собственный, встроенный test runner. Так исторически сложилось, что NodeJS поставлял библиотеку для асертов, но не поставлял ничего для тестирования. Т.е. все, что связано с авто-тестами было вынесено для реализации сообществом. И сообщество за все это время успешно опробовало различные способы тестировать код, а какие-то стали чем-то вроде профессионального стандарта (имею в виду jest и mocha) Теперь сообщество NodeJS решило, что пора внести в NodeJS возможность запускать тесты из коробки. При этом у проекта нет цели с нуля создать самый лучший фреймворк тестированиял. Вместо этого NodeJS сосредоточится на базовом функционале, который нужен всем фреймворкам тестирования и который используется большинством популярных решений. В NodeJS войдет: - Функция `test` для определения тестов и сьютов - Поддержка асинхронных тестов - Возможность запустить тесты проекта и указать какие конкретно - Гарантия изоляции тестов - Возможность запускать тесты в несколько потоков Пощупать test runner уже можно в nightly билдах NodeJS. Лично я надеюсь что это войдет уже в следующий LTS.
·fusebit.io·
A Built-in Test Runner Is Coming to Node and Why You Should Care
How we migrated 541 components from Styled Components to Emotion with zero bugs
How we migrated 541 components from Styled Components to Emotion with zero bugs
Команда storybook недавно мигрировала 541 свой компонент из Styled Components в Emotion. Для проверки корректности миграции использовались скриншот-тесты на Chromatic (инструмент для скриншот-тестирования историй в storybook от команды storybook). Статья на 50% состоит из рекламы storybook и chromatic, на другие 50% - про подход и про изменения в коде. В целом больше интересен сам подход проверки изменения большого количества стилей. Юнит-тесты в виде скриншот-тестов помогли корректно отрефакторить код.
·storybook.js.org·
How we migrated 541 components from Styled Components to Emotion with zero bugs
UI Testing Handbook
UI Testing Handbook
Storybook выпустили UI Testing Handbook - небольшой handbook по тестированию UI. Для тестирования UI предлагается: - Изолировать компонент в storybook - Делать скриншот-тесты в storybook - Делать тесты взаимодействие с компонентами с помощью jest и testing-library. Предлагается импортировать в код jest-тестов истории и тестировать именно эти компоненты. Звучит очень логично, но чтобы все заработало, нужно вызвать специальное API storybook в setupTests для jest. - Проверять доступностость с помощью Axe - Писать e2e-тесты с помощью Cypress В handbook есть подробные примеры кода тестов и настройки CI. Это неплохое, готовое руководство по тестированию UI. При чтении следует учитывать, что оно слишком привязано к storybook (что неудивительно т.к. это блог storybook), но все описанные принципы - верные
·storybook.js.org·
UI Testing Handbook
Дмитрий Коваленко — Считаете, что TDD не работает? У меня для вас плохие новости
Дмитрий Коваленко — Считаете, что TDD не работает? У меня для вас плохие новости
Неплохой доклад от Дмитрия Коваленко про то, что тесты должны не просто быть, но и помогать. Описание доклада с ютуба: Все говорят про последователей TDD, но никто их в глаза не видел? Вот он — Дима! А что, если TDD — это совсем не про то, что тесты нужно писать до кода? Хотя формально именно про это. Но в этом докладе Дима расскажет про свой подход к написанию тестов в стиле TDD, который экономит ему время и не имеет ничего общего с юнит-тестами.
·youtube.com·
Дмитрий Коваленко — Считаете, что TDD не работает? У меня для вас плохие новости
I test in prod – Increment: Testing
I test in prod – Increment: Testing
Обычно я не тестирую. Но когда я тестирую, я тестирую на проде (с) Джейсон Стетхем Статья о том, что тестирование на проде является является важной практикой, если мы хотим достичь высокого качества создаваемой системы. Однако, в IT о тестировании на проде принято не говорить, либо говорить в негативном ключе. Почему важно тестировать на проде: - Прод - это единственное место, где ваше приложение работает в настоящих условиях - Тестирование на проде также означает и ответтсвенность разработчика за то, как приложение работает на проде - Как бы вы не старались ловить баги перед продом - у вас всег да будут баги на проде. Поэтому важно уметь работать с прод окружением и мониторингом Тестирование на проде не означает отказ от тестирования перед продом. По-хорошему, вы должны уметь тестировать и перед и на проде. Подробнее о причинах и бенефитах читайте в статье. Статья большая и с английским, который сложнее обычного в IT статьях (ну, мне так показалось).
·increment.com·
I test in prod – Increment: Testing
Creating a React Custom Hook using TDD
Creating a React Custom Hook using TDD
Хороший пример, как писать кастомный хук для React с использованием TDD. Из минусов: как обычно в таких туториалах, пример очень простой. Но сложнее функции sum, что уже радует
·dev.to·
Creating a React Custom Hook using TDD
How to get started with property-based testing in JavaScript using fast-check
How to get started with property-based testing in JavaScript using fast-check
Статья про использование подхода property-based-testing с помощью fast-check Разработчики в основном описывают авто-тесты вида вход = функция = выход. Это авто-тесты на основе примеров (example-based). Но можно писать другие авто-тесты - property-based. В таких авто-тестах мы должны выделить свойство (property) тестируемой системы. Свойство - это то, что всегда истинно, если все корректно работают. Можно сказать, что это какое-то правило, описывающее тестируемую систему. Если мы сможем описать какое-то свойство системы, то мы сможем использовать инструмент для property-based тестирования, который сгенерирует для нас сотни и тысячи тестовых сценариев и сам проверит, что свойство всегда истинно. Самый просто пример, который можно описать в рамках канала: ``` const sum = (a, b) = a + b ``` Мы могли бы описать свойство, что при сложении двух позитивных чисел результат всегда будет больше любого из чисел ``` const propertyToTest = fc.property(fc.nat(), fc.nat(), (a,b) = { const result = sum(a,b) expect(result a).toEqual(true) expect(result b).toEqual(true) } fc.assert(propertyToTest, {numRuns: 10000}); ``` И fast-check запустит для нас 10000 тестов с разными числами. Property-based testing достаточно мощная техника, но которую сложно применить. Относительное этой статьи видно, что автор срезает углы, описывая преимущество property-based testing и недостатки examples-based testing. Например, в недостатках example-based тестирования указывается то, что мы можем тратить циклы ЦПУ на тесты, которые нам не нужны. Хотя property-based testing предполагает запуск тысяч тестов т.к. ЦПУ дешевое и мы можем себе позволить проверять кейс тысячи раз. Также в статье приводится достаточно простой для применения property-based тестирования. Будем честны - никогда нет проблем протестировать чистые функции, реализация которых занимает пару строчек. В таком случае не особо важно, какой подход использовать. В остальном статья, как обычно у James Sinclair - классная. Если вас интересует тема автоматического тестирования и property-based тестирование - рекомендую к прочтению, но закройте глаза на сравнения с example-based тестированием.
·jrsinclair.com·
How to get started with property-based testing in JavaScript using fast-check
Why separate test automation teams don't work
Why separate test automation teams don't work
Статья про то, почему выделенная команда для автотестов - антипаттерн, кроме одного сценария. Некоторые команды считают, что разработчики должны заниматься "важными" вещами - делать бизнес-фичи. Автоматизация тестирования это, конечно, важно, но не настолько. Поэтому есть такой паттерн - нанимать отдельных людей, задача которых автоматизировать тестирование за разработчиками. На практике это приводит к тому что: - Разработчики не задумываются о тестируемости кода = тестировать становится сложнее - Разработчики делают изменения, которые ломают авто-тесты, но разработчики не поддерживают авто-тесты. Принятие решения "это тест плохой или мы сломали что-то в продукте" требует большого количества времени - Фидбек от тестов очень долгий. Если у нас есть команда разработки и команда автоматизации тестирования, то, как правило, автотесты пишутся намного позже кода. В итоге эти автотесты дают фидбек о том, что что-то не работает слишком поздно. Возможно даже после релиза. Кажется, что иметь какие-то автотесты лучше, чем никаких. Но на практике это не всегда так. Например, лучше не иметь тестов вообще, если тесты - flaky, а тестовый прогон занимает 1 час. Но лучше все таки поменять процесс так, чтобы те, кто пишут код, писали на него и авто-тесты. Это хорошо, потому что: - Это упростит и написание тестов т.к. разработчик уже в контексте фичи и ему не нужно переключать контекст для написания авто-тестов - Система будет тестируемой - Фидбек от тестов будет раньше Я бы к мыслям автора добавил, что и сам код авто-тестов будет лучше т.к. разработчики, имея руки, растущие из правильного места, могут применить принципы DRY, SOLID и другие хорошие практики к авто-тестам. Автор также делает 1 исключение, в котором выделенная команда автоматического тестирования имеет смысл - это end-2-end тесты. end-2-end тесты могут быть не привязаны к конкретной команде т.к. проверяют все разом (грубо говоря, от верстки до БД), а также могут требовать отдельных компетенций.
·techbeacon.com·
Why separate test automation teams don't work
GitHub - lukeed/uvu: uvu is an extremely fast and lightweight test runner for Node.js and the browser
GitHub - lukeed/uvu: uvu is an extremely fast and lightweight test runner for Node.js and the browser
Ситник и artalar (автор ReatomJS) в твиттере рассказали о положительном опыте использования тест-раннера uvu. Поигрался локально - действительно быстро работает Из плюсов: - быстрый - простое API - нет глобальных переменных (describe, it, test). Все нужно импортировать явно. Как следствие, тесты можно запускать просто как `node test.ts` и это будет работать Из минусов: - Пока, например, нет возможности указать кастомный репортер для тестов. Так что, если вам нужна какая-нибудь интеграция или выгрузка результатов из CI куда-нибудь, то раннер может не подойти.
·github.com·
GitHub - lukeed/uvu: uvu is an extremely fast and lightweight test runner for Node.js and the browser
The Fundamentals of Testing with Persistence Layers
The Fundamentals of Testing with Persistence Layers
Статья про написание авто-тестов с использованием базы данных на C#. Автор отлично разбирается в автоматизации тестирования и понимает, зачем нужно писать авто-тесты и какими они должны быть. Это, в частности, видно по следующему выражению. So, we are going to ignore anyone who says, “A test should only have one assertion” and replace it with, “A test should have as many assertions as needed to prove a fact”. Каким-то образом в индустрии тезис "1 тест - 1 факт" превратился в "1 тест - 1 асерт". Последнее правило одновременно очень простое, популярное и неверное. В статье разбираются проблемы написания авто-тестов с использованием БД. Если мокать БД, то тесты будут давать недостаточно уверенности в работе программы. Если заводить БД на каждый тест - то это будет медленно и может привести к ложно-положительным срабатываниям. Например, если в БД всего 1 запись, то мы не узнаем что наш код плохо работает когда записей много. Поэтому автор предлагает использовать 1 инстанс БД для всех тестов, но при этом гарантировать изоляцию тестов с помощью самих тестов. Если вам интересны авто-тесты или вы хотите писать тесты с использованием БД - рекомендую данную статью к прочтению
·infoq.com·
The Fundamentals of Testing with Persistence Layers
Writing clean JavaScript tests with the BASIC principles
Writing clean JavaScript tests with the BASIC principles
Статья о BASIC - подходе к написанию автотестов. BASIC: - black-box - не тестируем имплементацию - annotative - декларативное описание тестов - single-door - проверяем ровно 1 факт - independent - тесты должны быть независимыми - copy only what’s necessary - все что нужно для понимания теста должно быть в тесте В статье разбирается практический пример, как применяя BASIC, можно сделать из плохого теста - хороший. Не смотря на то, что концепция BASIC очень хороша - она структурирует лишь часть хороших паттернов авто-тестирования. И, мне кажется, BASIC придуман больше как маркетинговый инструмент консультанта, который его придумал. Сами принципы хороши и всегда полезно прочесть о них еще раз.
·yonigoldberg.medium.com·
Writing clean JavaScript tests with the BASIC principles
Slow tests can and do result in production outages. Don’t believe me? Here’s how…
Slow tests can and do result in production outages. Don’t believe me? Here’s how…
Тред в твиттере о том, что медленные тесты в CI пайплайне обязательно приведут к падению прода. Если коротко: - тесты проходят медленно - фидбек-луп на изменения долгий - разработчики начинают группировать больше изменений вместе - Больший размер изменений - хуже ревью, выше шанс что что-то не так
·twitter.com·
Slow tests can and do result in production outages. Don’t believe me? Here’s how…
Improving Testability: Removing Anti-Patterns through Joint Conversations
Improving Testability: Removing Anti-Patterns through Joint Conversations
Любой код можно протестировать. Вопрос только в усилиях, которые необходимо затратить на тестирование кода. Как улучшить тестируемость системы? Н простых шагов: - Определить анти-паттерны, которые мешают тестировать код - Осознать, что тестирумость приложения важна, в том числе разработчикам - Осознать, что если автотесты пишут тестировщики и они подключаются после разработки - вносить изменения будет сложно - Проводить ретроспективы - почему что-то было сложно протестировать и как это исправить, а что было легко протестировать и как это закрепить - Думать о тестировании на шаге проектирования системы. Обсуждать архитектуру решения вместе с тестировщиком.
·infoq.com·
Improving Testability: Removing Anti-Patterns through Joint Conversations
A Journey in Test Engineering Leadership: Applying Session-Based Test Management
A Journey in Test Engineering Leadership: Applying Session-Based Test Management
Статья про Session-Based Test Management. Метод был описан еще в нулевых. Если коротко, то метод предлагает ставить процесс тестирования примерно так: - Лид группы определяет стратегию и план тестирования - Тестировщики тестируют - В конце тестирования создается отчет, в котором, в том числе, указываются сколько времени ушло на само тестирование, сколько на поиск багов и сколько на административную рутину - После этого мы можем анализировать, как бы улучшить процесс тестирования На мой взгляд достаточно бюрократизированная схема, но она хотя бы имеет цикл обратной связи. И кажется она подходит для бучения джунов-тестеров.
·infoq.com·
A Journey in Test Engineering Leadership: Applying Session-Based Test Management