Перейти до основного змісту

2016 в Jest

· 7 хвилин читання

2016 рік був дуже важливим для JavaScript тестування з Jest. Перші пів року ми переписували Jest і створювали надійну основу для значного підвищення продуктивності та допомоги в тестуванні JavaScript коду. Ми типізували всю базу коду, реалізували багато інтеграційних тестів для самого Jest та додали lerna для перетворення Jest з фреймворку на Платформу Безболісного JavaScript Тестування.

Нещодавно створений react-test-renderer нарешті дозволяє тестування react-native компонентів. Завдяки вбудованому пресету jest-react-native (тепер об’єднаному безпосередньо з react-native), Jest тепер працює для будь-якого проєкту React і йде попередньо сконфігурованим в проєктах create-react-app та react-native. Ми інтегрували базові частини Jest в пакувальник react-native, тож абсолютно нова функція тестування знімками з тих пір використовувалась поза межами Jest: вона була інтегрована з React Storybook у вигляді “storyshots” і додана в інші виконавці тестів, такі як ava.

Проєкт pretty-format був переписаний з фокусом на продуктивності для просування функції знімків Jest, а нещодавно ще й об'єднаний в monorepo Jest, що також буде кориснним для інших виконавців тестів. На цей момент Jest презентує збірник різних ідей та рішень для тестування, а не єдину конкретну реалізацію тестового фреймворку.

Я хотів би глибоко подякувати всім людям, які зробили внесок в Jest цього року, як зі сторони спільноти відкритого коду, так і Facebook: Dmitrii Abramov, Cristian Carlesso, Dan Abramov, Daniel Lo Nigro, Maxim Derbin, Evan Scott, Forbes Lindesay, Keyan Zhang і ще 60 людей. Ми також хотіли б привітати Michał Pierzchal (@thymike) як першого офіційного автора зовнішніх внесків в Jest. Він провів чудову роботу з управління проблемами та PR-ами репозиторію. Якщо ви хочете зробити внесок в Jest, ми маємо вдосталь хороших перших завдань і ми завжди раді допомогти в нашому discord каналі.

repl.it з інтеграцією Jest

Amjad Massad зібрав контейнер для Jest, тож тепер ви можете спробувати Jest безпосередньо в браузері. З цього моменту, ви можете використовувати його при створенні проблем на GitHub, що має допомогти швидше розв'язувати проблеми. Amjad і Haya створюють repl.it для демократизації програмування шляхом побудови потужних, але простих інструментів та платформ для педагогів, учнів та розробників. Вони також наймають талановитих розробників!

Оновлення спільноти

Ми неймовірно цінуємо, що 100+ компаній почали використовувати Jest за останні 6 місяців. Такі компанії, як Twitter, Pinterest, Paypal, nytime, IBM (Watson), Spotify, eBay, SoundCloud, Intuit, FormidableLabs, Automattic, Trivago та Microsoft повністю або частково перейшли на Jest через потреби в тестуванні JavaScript. Ми вдячні за шанс, який ви дали цьому проєкту. Ми також хотіли б подякувати всім, хто відвідував конференції та зустрічі для презентації Jest і усім, хто створює дописи в блогах про власний досвід з Jest!

Ось що сталося у спільноті за останні два місяці:

Нові функції, зміни та виправлення помилок у Jest 17 & 18

Jest був створений понад п'ять років тому, тож, як старий фреймворк, він накопичив технічний борг. Ось чому ми рішуче робимо великі зміни частіше, ніж може здатися необхідним: ми вважаємо за потрібне поступово зменшувати технічний борг, аби забезпечити Jest повноцінною довгостроковою підтримкою. Ми не оголосили про Jest 17 дописом, тож, якщо ви не оновлювались за останній місяць, вам може стати в пригоді наступний перелік змін.

  • Критично: Видалено pit на користь it or test і mockImpl на користь jest.fn() або mockImplementation.
  • Критично: Перейменовано --jsonOutputfile на --outputFile.
  • Критично: Оновлено testRegex, додано файли test.js та spec.js.
  • Критично: scriptPreprocessor замінено новим параметром transform.
  • Критично: Функція testResultsProcessor тепер має повертати змінені результати.
  • Потенціально критично: Виконуйте snapshotSerializers, setupFiles, transform, testRunner та testResultsProcessor повноцінно за допомогою алгоритму роздільної здатності замість path.resolve. Це загалом означає, що <rootDir> більше не треба для цих параметрів.
  • Додано: pretty-format і jest-editor-support були об'єднані з Jest.
  • Додано: expect.any, expect.anything, expect.objectContaining, expect.arrayContaining, expect.stringMatching.
  • Додано: --testResultsProcessor тепер у доступі через командний рядок.
  • Додано: Реалізовано перегляд файлів у jest-haste-map.
  • Додано: використання Jest в режимі спостереження може бути приховано за допомогою JEST_HIDE_USAGE.
  • Додано: expect.assertions(number), який гарантує, що в одному тесті здійснюється вказана кількість тверджень.
  • Додано: функція .toMatchSnapshot(?string), яка дає назви знімкам.
  • Додано: матчери toMatchObject, toHaveProperty, toHaveLength.
  • Додано: expect.extend.
  • Додано: Підтримка для користувацьких серіалізаторів знімків.
  • Додано: Великі відмінності в знімках і твердженнях тепер згорнуті за замовчуванням. Додано --expand (або -e) для показу повної різниці.
  • Додано: jest.resetAllMocks на заміну jest.clearAllMocks.
  • Додано: --json тепер містить інформацію про окремі тести всередині файлу.
  • Виправлено: test.concurrent не обробляв відхилені проміси.
  • Виправлено: babel-plugin-jest-hoist під час використання jest.mock з трьома параметрами.
  • Виправлено: Глобальний JSON в jest-environment-node тепер приходить з контексту vm замість батьківського.
  • Виправлено: Jest більше не друкує стекові сліди з babel.
  • Виправлено: Фіктивні таймери скидаються при виклику FakeTimers.useTimers().
  • Виправлено: Регулярні вирази в знімках обходяться правильно.
  • Виправлено: Покращено форматування великих об'єктів.
  • Виправлено: NaN% Failed в повідомленнях операційної системи при використанні --notify.
  • Виправлено: Перший тестовий запуск без кешованих таймінгів буде використовувати окремі процеси.
  • Виправлено: Map/Set порівняння.
  • Виправлено: test.concurrent тепер працює з --testNamePattern.
  • Виправлено: Покращено матчер .toContain.
  • Виправлено: Правильно виконані модулі з розширеннями платформ в react-native.
  • Виправлено: Глобальні вбудовані об'єкти в jest-environment-node тепер працюють належним чином.
  • Виправлено: Створення об'єктів-імітацій в контексті vm замість батьківського.
  • Виправлено: .babelrc став частиною ключа перетворення кешу в babel-jest.
  • Виправлено: Обробка docblock з модулями haste.
  • Виправлено: Вихід з належним кодом, коли не досягнуто поріг покриття.
  • Виправлено: Jest тепер очищує все прокручування в режимі спостереження.
  • Застаріло: jest-react-native застарів і тепер перенаправляє на react-native.

Плани Jest на першу половину 2017

Шість місяців тому ми поділилися нашими планами на Jest і радіємо, що майже всі змогли повноцінно виконати. Наші плани на наступні шість місяців:

  • Миттєвий зворотний зв'язок: інтеграція Nuclide та покращений швидший режим спостереження.
  • Покращений досвід розробника: нові API імітацій і покращені твердження.
  • Краща продуктивність та використання пам'яті: аналізуйте Jest та звертайте увагу на ефективність.
  • Покращення знімків: режим затвердження знімків, підсвітка синтаксису та покращений API react-test-renderer.
  • Вебсайт: Ми переробили вебсайт та документацію, додали лист-шпаргалку Jest.

Ми не надаватимемо графіків та розрахунків для цих нововведень, може так статись, що не все вдасться реалізувати. Якщо ви хочете допомогти з реалізацією, надішліть нам задачі та запроси на злиття з вашими ідеями; працюватимемо над покращенням Jest у 2017 році разом.