Режимом watch тестового фреймворка jest
Утилита командной строки jest имеет ряд полезных опций. Вы можете выполнить команду jest --help для просмотра всех доступных параметров. Многие из них могут использоваться совместно друг с другом для запуска тестов именно так, как вы хотите. Всем конфигурационным параметрам также соответствуют опции для командной строки.
Вот их краткий обзор:
Запуск всех тестов (по умолчанию):
Запустить только тесты по шаблону или по имени файла:
Выполнить тесты, связанные с измененными файлами, отраженными в hg/git (uncommitted файлы):
Запуск тестов, относящихся к файлам path/to/fileA.js и path/to/fileB.js :
Run tests that match this spec name (match against the name in describe or test , basically).
Запуск в режиме отслеживания изменений:
Режим отслеживания изменений также позволяет указать имя или путь к файлу, чтобы сфокусироваться на выполнении определенного набора тестов.
Если Jest запускается через npm test , по-прежнему можно использовать аргументы командной строки путем добавления -- между командой npm test и аргументами Jest. Вместо:
вы можете использовать:
Аргументы командной строки имеют приоритет над значениями из конфигурации.
При запуске Jest с аргументом этот аргумент интерпретируется как регулярное выражение, сопоставляемое c файлами в вашем проекте. Это позволяет запустить наборы тестов, предоставляя шаблон. Будут выбраны и выполнены только те файлы, которые соответствуют шаблону. Примечание: в зависимости от вашего терминала, может потребоваться экранирование аргумента кавычками: jest "довольно.* (сложный)? шаблон" .
Псевдоним: -b . Завершает выполнение тестов сразу же после первого сбоя.
Нужно ли использовать кэш. По умолчанию используется значение true. Отключить использование кэша можно с помощью флага --no-cache . Примечание: кэш следует отключать, только если вы испытываете связанные с ним трудности. В среднем, отключение кэша делает Jest по крайней мере в два раза медленнее.
If you want to inspect or clear the cache, use --showConfig and look at the cacheDirectory value.
При указании этой опции Jest будет считать, что выполняется в CI-среде. В этом случае меняется поведение при обнаружении новых тестов со снимками. Вместо того, чтобы автоматически сохранить новый снимок, Jest будет считать тест проваленным, если запущен без --updateSnapshot .
Glob-шаблон относительно корневой папки, совпадающий с файлами, из которых нужно извлечь информацию о покрытии.
Принудительно включает подсветку вывода результатов тестирования, даже если stdout – не TTY.
Псевдоним: -c . Путь к файлу конфигурации Jest, указывающий, как находить и выполнять тесты. Если параметр rootDir не задан в конфигурации, предполагается, что текущий каталог – корневой в проекте. Для задания данной опции может быть использовано JSON-значение, которое Jest будет использовать как конфигурацию.
Указывает, что следует собирать и отображать информацию о тестовом покрытии.
Печатает отладочную информацию о вашей конфигурации Jest.
Тестовое окружение, используемое для всех тестов. Может указывать на любой node-модуль или файл. Примеры: jsdom , node или путь/к/окружению.js .
Находит и запускает тесты, совпадающие со списком исходных файлов, переданных в качестве аргументов. Может быть полезно в pre-commit хуках системы контроля версий для запуска минимального необходимого множества тестов.
Вынуждает Jest закончить исполнение после того, как все тесты завершены. Полезно в случаях, когда ресурсы, созданные в целях тестирования, не могут быть освобождены надлежащим образом. Примечание: Данная опция – это, по сути, обходной механизм. Если Jest не заканчивает выполнение после того, как тесты завершились, это означает, что внешние ресурсы по-прежнему удерживаются или таймеры ожидают завершения. Настоятельно рекомендуется высвобождать внешние ресурсы после завершения каждого отдельного теста для того, чтобы Jest успешно мог завершить выполнение.
Показать справку, схожую с данной страницей.
Записывает результаты тестов в файл, если также указан флаг --json .
Выполнит все тесты, затрагиваемые изменениями файлов в последнем коммите.
Выводит список всех тестов, которые Jest выполнит по заданным параметрам, и завершается. Можно использовать вместе с --findRelatedTests , чтобы узнать, какие тесты запустит Jest.
Заносит в журнал данные об использовании динамической области после каждого теста. Полезно для выявления утечек памяти. При запуске в Node используйте вместе с опциями --runInBand и --expose-gc .
Псевдоним: -w . Задает максимальное количество рабочих потоков, выделяемое при выполнении тестов. По умолчанию задается равным количеству ядер, доступных на компьютере. Может быть полезно использовать данную опцию в средах с ограниченными ресурсами, такими как системы непрерывной интеграции. Значение по умолчанию для данной опции должно быть приемлемо для большинства остальных вариантов использования.
Отключает отображение трассирования стека при выводе результатов тестов.
Активирует уведомления для результатов тестирования. Хорошо, когда вы не хотите акцентировать все свое внимание на тестировании JavaScript.
Псевдоним: -o . Предпринимает попытку определить какие тесты запускать основываясь на данных о том, какие файлы в текущем репозитории были изменены. Успешно срабатывает только если вы запускаете тесты в git/hg репозитории. Также требует наличия статического графа зависимостей (т. е. не динамические зависимости).
Run tests from one or more projects.
Псевдоним: -i . Последовательно выполняет все тесты в текущем процессе вместо создания пула дочерних рабочих процессов, которые выполняют тесты. Может быть полезно для отладки.
Путь к модулю, выполняющему настройку или запуск тестового фреймворка перед каждым тестом. Помните, что к файлам, импортируемым внутри этого модуля, во время выполнения тестов не будут применяться моки.
Выводит конфигурацию Jest и затем завершается.
Псевдоним: -t . Запускает только те тесты, имя которых совпадает с регулярным выражением.
Строка регулярного выражения, которая противопоставляется всем путям тестов перед выполнением.
Позволяет указать сторонний исполнитель тестов.
Псевдоним: -u . Используйте этот флаг, чтобы повторно сохранять каждый снимок, который проваливается при исполнении тестов. Может использоваться для повторного сохранения снимков вместе с шаблоном для набора тестов или с опцией --testNamePattern .
Переадресует все выходные данные в stderr.
Отображает результаты индивидуальных тестов в тестовой иерархии.
Псевдоним: -v . Печатает текущую версию и выходит.
Наблюдает за изменениями в файлах и перезапускает тесты связанные с измененными файлами. Если вместо этого необходимо перезапускать все тесты, используйте флаг --watchAll .
Наблюдает за изменениями в файлах и перезапускает тесты, если что-то изменяется. Если необходимо перезапускать только тесты для измененных файлов, используйте флаг --watch .
Следует ли использовать watchman для обхода файлов. По умолчанию используется значение true. Возможно отключить используя --no-watchman .
Утилита командной строки jest имеет ряд полезных опций. Вы можете выполнить команду jest --help для просмотра всех доступных параметров. Многие из них могут использоваться совместно друг с другом для запуска тестов именно так, как вы хотите. Каждый из конфигурационных параметров Jest может также быть настроен через командную строку.
Вот их краткий обзор:
Запуск через yarn
Если вы запустите Jest через yarn test , вы можете передать аргументы командной строки прямо как Jest аргументы.
вы можете использовать:
2. Tests should be deterministic
Your tests should be deterministic. Running the same tests multiple times on a component that has not changed should produce the same results every time. You're responsible for making sure your generated snapshots do not include platform specific or other non-deterministic data.
For example, if you have a Clock component that uses Date.now() , the snapshot generated from this component will be different every time the test case is run. In this case we can mock the Date.now() method to return a consistent value every time the test is run:
Now, every time the snapshot test case runs, Date.now() will return 1482363367071 consistently. This will result in the same snapshot being generated for this component regardless of when the test is run.
--injectGlobals
Добавить глобальные переменные Jest ( expect , test , describe , beforeEach и т. д.) в окружение. Если эта опция равна false , тогда нужно импортировать глобальные переменные из @jest/globals , например.
This option is only supported using the default jest-circus test runner.
--roots
Список путей к директориями, в которых Jest должен искать файлы с тестами.
What's the difference between snapshot testing and visual regression testing?
Snapshot testing and visual regression testing are two distinct ways of testing UIs, and they serve different purposes. Visual regression testing tools take screenshots of web pages and compare the resulting images pixel by pixel. With Snapshot testing values are serialized, stored within text files, and compared using a diff algorithm. There are different trade-offs to consider and we listed the reasons why snapshot testing was built in the Jest blog.
--onlyChanged
Alias: -t . Run only tests with a name that matches the regex. For example, suppose you want to run only tests related to authorization which will have names like "GET /api/posts with auth" , then you can use jest -t=auth .
--notify
Включает оповещения для результатов прогона тестов. Удобно, когда вы не хотите акцентировать всё свое внимание на тестировании JavaScript.
--findRelatedTests
Запускает тесты, которые покрывают список файлов, переданных в качестве параметров через пробел. Эту опцию удобно использовать в связке с pre-commit хуком, так как она будет запускать только минимально необходимое количество тестов. Can be used together with --coverage to include a test coverage for the source files, no duplicate --collectCoverageFrom arguments needed.
--resetMocks
Automatically reset mock state before every test. Equivalent to calling jest.resetAllMocks() before each test. This will lead to any mocks having their fake implementations removed but does not restore their initial implementation.
--outputFile=
Записывает результаты тестов в файл при условии, если указан флаг --json . Структура возвращаемого JSON описана по ссылке testResultsProcessor.
--forceExit
Вынуждает Jest закончить исполнение после того, как все тесты завершены. Полезно в случаях, когда ресурсы, созданные в целях тестирования, не могут быть освобождены надлежащим образом.
This feature is an escape-hatch. Если Jest не заканчивает выполнение после того, как тесты завершились, это означает, что внешние ресурсы по-прежнему удерживаются или таймеры ожидают завершения. Настоятельно рекомендуется высвобождать внешние ресурсы после завершения каждого отдельного теста для того, чтобы Jest успешно мог завершить выполнение. You can use --detectOpenHandles to help track it down.
Показать справку, схожую с данной страницей.
--logHeapUsage
Заносит в журнал данные об использовании динамической области после каждого теста. Полезно для выявления утечек памяти. При запуске в Node используйте вместе с опциями --runInBand и --expose-gc .
--debug
Выводит информацию о файле конфигурации Jest.
--testMatch glob1 . globN
The glob patterns Jest uses to detect test files. Please refer to the testMatch configuration for details.
Frequently Asked Questions
--noStackTrace
Отключает отображение трассирования стека при выводе результатов тестов.
--config=
Псевдоним: -c . Путь к файлу конфигурации Jest, в котором указывается где искать и как выполнять тесты. Если в конфигурации не задан rootDir , тогда каталог с конфигурационным файлом будет считаться rootDir для проекта. Для задания данной опции может быть использовано JSON-значение, которое Jest будет использовать как конфигурацию.
--findRelatedTests
Запускает тесты, которые покрывают список файлов, переданных в качестве параметров через пробел. Эту опцию удобно использовать в связке с pre-commit хуком, так как она будет запускать только минимально необходимое количество тестов. Can be used together with --coverage to include a test coverage for the source files, no duplicate --collectCoverageFrom arguments needed.
--errorOnDeprecated
Make calling deprecated APIs throw helpful error messages. Useful for easing the upgrade process.
--useStderr
Отображает результаты индивидуальных тестов в тестовой иерархии.
--watchman
Whether to use watchman for file crawling. Defaults to true . Disable using --no-watchman .
Snapshot tests are a very useful tool whenever you want to make sure your UI does not change unexpectedly.
A typical snapshot test case renders a UI component, takes a snapshot, then compares it to a reference snapshot file stored alongside the test. The test will fail if the two snapshots do not match: either the change is unexpected, or the reference snapshot needs to be updated to the new version of the UI component.
--updateSnapshot
Псевдоним: -u . Используйте этот флаг, чтобы повторно сохранять каждый снимок, который проваливается при исполнении тестов. Может использоваться для повторного сохранения снимков вместе с шаблоном для набора тестов или с опцией --testNamePattern .
--version
Псевдоним: -v . Печатает текущую версию и выходит.
Snapshot Testing with Jest
A similar approach can be taken when it comes to testing your React components. Instead of rendering the graphical UI, which would require building the entire app, you can use a test renderer to quickly generate a serializable value for your React tree. Consider this example test for a Link component:
The first time this test is run, Jest creates a snapshot file that looks like this:
The snapshot artifact should be committed alongside code changes, and reviewed as part of your code review process. Jest uses pretty-format to make snapshots human-readable during code review. On subsequent test runs, Jest will compare the rendered output with the previous snapshot. If they match, the test will pass. If they don't match, either the test runner found a bug in your code (in the component in this case) that should be fixed, or the implementation has changed and the snapshot needs to be updated.
Note: The snapshot is directly scoped to the data you render – in our example the component with page prop passed to it. This implies that even if any other file has missing props (Say, App.js ) in the component, it will still pass the test as the test doesn't know the usage of component and it's scoped only to the Link.js . Also, rendering the same component with different props in other snapshot tests will not affect the first one, as the tests don't know about each other.
More information on how snapshot testing works and why we built it can be found on the release blog post. We recommend reading this blog post to get a good sense of when you should use snapshot testing. We also recommend watching this egghead video on Snapshot Testing with Jest.
--testPathPattern=
Строка регулярного выражения, которая противопоставляется всем путям тестов перед выполнением. On Windows, you will need to use / as a path separator or escape \ as \\ .
--noStackTrace
Отключает отображение трассирования стека при выводе результатов тестов.
--watchAll
Наблюдает за изменениями в файлах и перезапускает тесты, если что-то изменяется. Если необходимо перезапускать только тесты для измененных файлов, используйте флаг --watch .
Используйте --watchAll=false , чтобы явно отключить режим наблюдения. Обратите внимание, что в большинстве окружений непрерывной интеграции (CI) это осуществляется автоматически.
--watchman
Whether to use watchman for file crawling. Defaults to true . Disable using --no-watchman .
Are snapshots written automatically on Continuous Integration (CI) systems?
No, as of Jest 20, snapshots in Jest are not automatically written when Jest is run in a CI system without explicitly passing --updateSnapshot . It is expected that all snapshots are part of the code that is run on CI and since new snapshots automatically pass, they should not pass a test run on a CI system. It is recommended to always commit all snapshots and to keep them in version control.
--injectGlobals
Добавить глобальные переменные Jest ( expect , test , describe , beforeEach и т. д.) в окружение. Если эта опция равна false , тогда нужно импортировать глобальные переменные из @jest/globals , например.
This option is only supported using the default jest-circus test runner.
--errorOnDeprecated
Make calling deprecated APIs throw helpful error messages. Useful for easing the upgrade process.
1. Treat snapshots as code
Commit snapshots and review them as part of your regular code review process. This means treating snapshots as you would any other type of test or code in your project.
Ensure that your snapshots are readable by keeping them focused, short, and by using tools that enforce these stylistic conventions.
As mentioned previously, Jest uses pretty-format to make snapshots human-readable, but you may find it useful to introduce additional tools, like eslint-plugin-jest with its no-large-snapshots option, or snapshot-diff with its component snapshot comparison feature, to promote committing short, focused assertions.
The goal is to make it easy to review snapshots in pull requests, and fight against the habit of regenerating snapshots when test suites fail instead of examining the root causes of their failure.
--shard
The test suite shard to execute in a format of (?\d+)/(?\d+) .
shardIndex describes which shard to select while shardCount controls the number of shards the suite should be split into.
shardIndex and shardCount have to be 1-based, positive numbers, and shardIndex has to be lower than or equal to shardCount .
When shard is specified the configured testSequencer has to implement a shard method.
For example, to split the suite into three shards, each running one third of the tests:
Использование со скриптами npm
Если вы запускаете Jest с помощью npm test , то вы по-прежнему можете использовать аргументы командной строки путем добавления -- между командой npm test и аргументами Jest.
вы можете использовать:
--coverageProvider=
Indicates which provider should be used to instrument code for coverage. Допустимые значения: babel (по умолчанию) или v8 .
Note that using v8 is considered experimental. This uses V8's builtin code coverage rather than one based on Babel. It is not as well tested, and it has also improved in the last few releases of Node. Using the latest versions of node (v14 at the time of this writing) will yield better results.
--setupFilesAfterEnv .
A list of paths to modules that run some code to configure or to set up the testing framework before each test. Beware that files imported by the setup scripts will not be mocked during testing.
--onlyChanged
Alias: -t . Run only tests with a name that matches the regex. For example, suppose you want to run only tests related to authorization which will have names like "GET /api/posts with auth" , then you can use jest -t=auth .
--testTimeout=
Default timeout of a test in milliseconds. Default value: 5000.
--testNamePattern=
Alias: -t. Запускает только те тесты, наименование которых подпадает под шаблон регулярного выражения. For example, suppose you want to run only tests related to authorization which will have names like "GET /api/posts with auth", then you can use jest -t=auth.
The regex is matched against the full name, which is a combination of the test name and all its surrounding describe blocks.
--colors
Принудительно включает подсветку вывода результатов тестирования, даже если stdout – не TTY.
--testSequencer=
Lets you specify a custom test sequencer. Please refer to the testSequencer configuration for details.
Property Matchers
Often there are fields in the object you want to snapshot which are generated (like IDs and Dates). If you try to snapshot these objects, they will force the snapshot to fail on every run:
For these cases, Jest allows providing an asymmetric matcher for any property. These matchers are checked before the snapshot is written or tested, and then saved to the snapshot file instead of the received value:
Any given value that is not a matcher will be checked exactly and saved to the snapshot:
If the case concerns a string not an object then you need to replace random part of that string on your own before testing the snapshot.
You can use for that e.g. replace() and regular expressions.
Another way is to mock the library responsible for generating the random part of the code you're snapshotting.
Справка
При запуске Jest с аргументом этот аргумент интерпретируется как регулярное выражение, сопоставляемое c файлами в вашем проекте. Это позволяет запустить наборы тестов, предоставляя шаблон. Будут выбраны и выполнены только те файлы, которые соответствуют шаблону. В зависимости от терминала, может понадобится заключить аргумент в кавычки: jest "my.*(complex)?pattern" . On Windows, you will need to use / as a path separator or escape \ as \\ .
Псевдоним: -b . Выход из набора тестов сразу после n неудачных тестов. По умолчанию 1 .
--testEnvironmentOptions=
A JSON string with options that will be passed to the testEnvironment . The relevant options depend on the environment.
--listTests
Lists all test files that Jest will run given the arguments, and exits.
--projects .
Run tests from one or more projects, found in the specified paths; also takes path globs. This option is the CLI equivalent of the projects configuration option. Note that if configuration files are found in the specified paths, all projects specified within those configuration files will be run.
--silent
--collectCoverageFrom=
Glob-шаблон отностительно rootDir , по которому будут выбраны файлы с информацией для отчета о покритии тестами.
--projects .
Run tests from one or more projects, found in the specified paths; also takes path globs. This option is the CLI equivalent of the projects configuration option. Note that if configuration files are found in the specified paths, all projects specified within those configuration files will be run.
--testNamePattern=
Alias: -t. Запускает только те тесты, наименование которых подпадает под шаблон регулярного выражения. For example, suppose you want to run only tests related to authorization which will have names like "GET /api/posts with auth", then you can use jest -t=auth.
The regex is matched against the full name, which is a combination of the test name and all its surrounding describe blocks.
Запуск из командной строки
Запуск всех тестов (по умолчанию):
Запустить только тесты по шаблону или по имени файла:
Выполнить тесты, связанные с измененными файлами, отраженными в hg/git (uncommitted файлы):
Запуск тестов, относящихся к файлам path/to/fileA.js и path/to/fileB.js :
Выполнить тесты, названия которых совпадают с переданным аргументом (сравниваются строки в блоках describe и test ).
Запуск в режиме отслеживания изменений:
Режим отслеживания изменений также позволяет указать имя или путь к файлу, чтобы сфокусироваться на выполнении определенного набора тестов.
--testPathIgnorePatterns=|[array]
A single or array of regexp pattern strings that are tested against all tests paths before executing the test. Contrary to --testPathPattern , it will only run those tests with a path that does not match with the provided regexp expressions.
To pass as an array use escaped parentheses and space delimited regexps such as \(/node_modules/ /tests/e2e/\) . Alternatively, you can omit parentheses by combining regexps into a single regexp like /node_modules/|/tests/e2e/ . These two examples are equivalent.
--ignoreProjects .
Ignore the tests of the specified projects. Jest использует атрибут displayName из конфигурации для идентификации каждого проекта. Если вы используете эту опцию, вы должны указать displayName во всех ваших проектах.
Создание базового файла конфигурации. Jest задаст несколько вопросов, чтобы сгенерировать файл jest.config.js с коротким описанием каждой опции.
--debug
Выводит информацию о файле конфигурации Jest.
--showConfig
Печатает Jest конфигурацию и затем выходит.
--setupFilesAfterEnv .
A list of paths to modules that run some code to configure or to set up the testing framework before each test. Beware that files imported by the setup scripts will not be mocked during testing.
--useStderr
Отображает результаты индивидуальных тестов в тестовой иерархии.
--testPathIgnorePatterns=|[array]
A single or array of regexp pattern strings that are tested against all tests paths before executing the test. Contrary to --testPathPattern , it will only run those tests with a path that does not match with the provided regexp expressions.
To pass as an array use escaped parentheses and space delimited regexps such as \(/node_modules/ /tests/e2e/\) . Alternatively, you can omit parentheses by combining regexps into a single regexp like /node_modules/|/tests/e2e/ . These two examples are equivalent.
--updateSnapshot
Псевдоним: -u . Используйте этот флаг, чтобы повторно сохранять каждый снимок, который проваливается при исполнении тестов. Может использоваться для повторного сохранения снимков вместе с шаблоном для набора тестов или с опцией --testNamePattern .
--passWithNoTests
Разрешает успешно завершиться прогону тестов, даже если ни одного теста не было обнаружено.
--changedFilesWithAncestor
Запускает тесты для файлов с текущими изменениями, а также для файлов, которые были измененны в предыдущем коммите. Похожая опция: --onlyChanged .
--lastCommit
Выполнит все тесты, которые были связаны с изменёнными файлами в последнем коммите. Похожая опция: --onlyChanged .
Написание параметров через тире или с большой буквы
Jest поддерживает форматы написания аргументов в верблюжьем стиле (camelCase) и через тире. Следующие примеры будут иметь одинаковый результат:
Формат написания аргументов может смешиваться:
--logHeapUsage
Заносит в журнал данные об использовании динамической области после каждого теста. Полезно для выявления утечек памяти. При запуске в Node используйте вместе с опциями --runInBand и --expose-gc .
--filter=
Путь к модулю, экспортирующему функцию фильтрации. This asynchronous function receives a list of test paths which can be manipulated to exclude tests from running by returning an object with the "filtered" property. Especially useful when used in conjunction with a testing infrastructure to filter known broken, e.g.
--testPathPattern=
Строка регулярного выражения, которая противопоставляется всем путям тестов перед выполнением. On Windows, you will need to use / as a path separator or escape \ as \\ .
How do I resolve conflicts within snapshot files?
Snapshot files must always represent the current state of the modules they are covering. Therefore, if you are merging two branches and encounter a conflict in the snapshot files, you can either resolve the conflict manually or update the snapshot file by running Jest and inspecting the result.
Написание параметров через тире или с большой буквы
Jest поддерживает форматы написания аргументов в верблюжьем стиле (camelCase) и через тире. Следующие примеры будут иметь одинаковый результат:
Формат написания аргументов может смешиваться:
--testMatch glob1 . globN
The glob patterns Jest uses to detect test files. Please refer to the testMatch configuration for details.
--maxWorkers=|
Псевдоним: -w . Задает максимальное количество рабочих потоков, выделяемое при выполнении тестов. В одиночном режиме прогона тестов, данный параметр будет равен количеству ядер, доступных на вашем компьютере минус 1 ядро, на котором запущен главный поток выполнения. В режиме наблюдения за изменениями файлов (watch mode), данный параметр будет равен половине от доступного количества ядер ПК, во избежание фризов системы и чрезмерного потребления ресурсов ПК Jest'ом. Может быть полезно настроить этот параметр в средах выполнения кода с ограниченными ресурсами, например в CI средах. Значение по умолчанию должно быть приемлемым для остальных вариантов использования.
Для окружений с переменным количеством доступных ядер процессора можно указать значение в процентах, например 50% от переменного кол-ва ядер ЦП: --maxWorkers=50%
--selectProjects .
Run the tests of the specified projects. Jest использует атрибут displayName из конфигурации для идентификации каждого проекта. Если вы используете эту опцию, вы должны указать displayName во всех ваших проектах.
--forceExit
Вынуждает Jest закончить исполнение после того, как все тесты завершены. Полезно в случаях, когда ресурсы, созданные в целях тестирования, не могут быть освобождены надлежащим образом.
This feature is an escape-hatch. Если Jest не заканчивает выполнение после того, как тесты завершились, это означает, что внешние ресурсы по-прежнему удерживаются или таймеры ожидают завершения. Настоятельно рекомендуется высвобождать внешние ресурсы после завершения каждого отдельного теста для того, чтобы Jest успешно мог завершить выполнение. You can use --detectOpenHandles to help track it down.
Показать справку, схожую с данной страницей.
--colors
Принудительно включает подсветку вывода результатов тестирования, даже если stdout – не TTY.
--cache
Нужно ли использовать кэш. По умолчанию используется значение true. Отключить использование кэша можно с помощью флага --no-cache .
The cache should only be disabled if you are experiencing caching related problems. On average, disabling the cache makes Jest at least two times slower.
Чтобы посмотреть содержимое кэша используйте аргумент --showConfig и значение cacheDirectory . Для очистки кэша добавьте --clearCache .
--testLocationInResults
Adds a location field to test results. Useful if you want to report the location of a test in a reporter.
Note that column is 0-indexed while line is not.
What is the performance of snapshot testing regarding speed and size of the generated files?
Jest has been rewritten with performance in mind, and snapshot testing is not an exception. Since snapshots are stored within text files, this way of testing is fast and reliable. Jest generates a new file for each test file that invokes the toMatchSnapshot matcher. The size of the snapshots is pretty small: For reference, the size of all snapshot files in the Jest codebase itself is less than 300 KB.
Best Practices
Snapshots are a fantastic tool for identifying unexpected interface changes within your application – whether that interface is an API response, UI, logs, or error messages. As with any testing strategy, there are some best-practices you should be aware of, and guidelines you should follow, in order to use them effectively.
--coverage[=]
Аналог: --collectCoverage . Указывает, что следует собирать и отображать информацию о тестовом покрытии. Возможно передать для переопределения параметров, установленных в конфигурации.
--maxConcurrency=
Приостанавливает Jest от выполнения большего количества тестов одновременно, чем указано. Влияет только на тесты, использующие test.concurrent .
--notify
Включает оповещения для результатов прогона тестов. Удобно, когда вы не хотите акцентировать всё свое внимание на тестировании JavaScript.
--runTestsByPath
Запускает тесты, к которым указаны конкретные пути.
The default regex matching works fine on small runs, but becomes slow if provided with multiple patterns and/or against a lot of tests. This option replaces the regex matching logic and by that optimizes the time it takes Jest to filter specific test files.
--runInBand
Псевдоним: -i . Последовательно выполняет все тесты в текущем процессе вместо создания пула дочерних рабочих процессов, которые выполняют тесты. Может быть полезно для отладки.
--passWithNoTests
Разрешает успешно завершиться прогону тестов, даже если ни одного теста не было обнаружено.
--showConfig
Печатает Jest конфигурацию и затем выходит.
Interactive Snapshot Mode
Failed snapshots can also be updated interactively in watch mode:
Once you enter Interactive Snapshot Mode, Jest will step you through the failed snapshots one test at a time and give you the opportunity to review the failed output.
From here you can choose to update that snapshot or skip to the next:
Once you're finished, Jest will give you a summary before returning back to watch mode:
Updating Snapshots
It's straightforward to spot when a snapshot test fails after a bug has been introduced. When that happens, go ahead and fix the issue and make sure your snapshot tests are passing again. Now, let's talk about the case when a snapshot test is failing due to an intentional implementation change.
One such situation can arise if we intentionally change the address the Link component in our example is pointing to.
In that case, Jest will print this output:
Since we just updated our component to point to a different address, it's reasonable to expect changes in the snapshot for this component. Our snapshot test case is failing because the snapshot for our updated component no longer matches the snapshot artifact for this test case.
To resolve this, we will need to update our snapshot artifacts. You can run Jest with a flag that will tell it to re-generate snapshots:
Go ahead and accept the changes by running the above command. You may also use the equivalent single-character -u flag to re-generate snapshots if you prefer. This will re-generate snapshot artifacts for all failing snapshot tests. If we had any additional failing snapshot tests due to an unintentional bug, we would need to fix the bug before re-generating snapshots to avoid recording snapshots of the buggy behavior.
If you'd like to limit which snapshot test cases get re-generated, you can pass an additional --testNamePattern flag to re-record snapshots only for those tests that match the pattern.
You can try out this functionality by cloning the snapshot example, modifying the Link component, and running Jest.
Does snapshot testing only work with React components?
React and React Native components are a good use case for snapshot testing. However, snapshots can capture any serializable value and should be used anytime the goal is testing whether the output is correct. The Jest repository contains many examples of testing the output of Jest itself, the output of Jest's assertion library as well as log messages from various parts of the Jest codebase. See an example of snapshotting CLI output in the Jest repo.
--reporters
Запуск тестов с указанными генераторами отчетов. Параметры генераторов отчета недоступны через командную строку. Пример с несколькими генераторами отчетов:
jest --reporters="default" --reporters="jest-junit"
--silent
--testTimeout=
Default timeout of a test in milliseconds. Default value: 5000.
Запуск из командной строки
Запуск всех тестов (по умолчанию):
Запустить только тесты по шаблону или по имени файла:
Выполнить тесты, связанные с измененными файлами, отраженными в hg/git (uncommitted файлы):
Запуск тестов, относящихся к файлам path/to/fileA.js и path/to/fileB.js :
Выполнить тесты, названия которых совпадают с переданным аргументом (сравниваются строки в блоках describe и test ).
Запуск в режиме отслеживания изменений:
Режим отслеживания изменений также позволяет указать имя или путь к файлу, чтобы сфокусироваться на выполнении определенного набора тестов.
--outputFile=
Записывает результаты тестов в файл при условии, если указан флаг --json . Структура возвращаемого JSON описана по ссылке testResultsProcessor.
Should snapshot files be committed?
Yes, all snapshot files should be committed alongside the modules they are covering and their tests. They should be considered part of a test, similar to the value of any other assertion in Jest. In fact, snapshots represent the state of the source modules at any given point in time. In this way, when the source modules are modified, Jest can tell what changed from the previous version. It can also provide a lot of additional context during code review in which reviewers can study your changes better.
--restoreMocks
Automatically restore mock state and implementation before every test. Equivalent to calling jest.restoreAllMocks() before each test. This will lead to any mocks having their fake implementations removed and restores their initial implementation.
--watch
Наблюдает за изменениями в файлах и перезапускает тесты связанные с измененными файлами. Если вместо этого необходимо перезапускать все тесты, используйте флаг --watchAll .
--collectCoverageFrom=
Glob-шаблон отностительно rootDir , по которому будут выбраны файлы с информацией для отчета о покритии тестами.
--maxConcurrency=
Приостанавливает Jest от выполнения большего количества тестов одновременно, чем указано. Влияет только на тесты, использующие test.concurrent .
--listTests
Lists all test files that Jest will run given the arguments, and exits.
Does snapshot testing replace unit testing?
Snapshot testing is only one of more than 20 assertions that ship with Jest. The aim of snapshot testing is not to replace existing unit tests, but to provide additional value and make testing painless. In some scenarios, snapshot testing can potentially remove the need for unit testing for a particular set of functionalities (e.g. React components), but they can work together as well.
--maxWorkers=|
Псевдоним: -w . Задает максимальное количество рабочих потоков, выделяемое при выполнении тестов. В одиночном режиме прогона тестов, данный параметр будет равен количеству ядер, доступных на вашем компьютере минус 1 ядро, на котором запущен главный поток выполнения. В режиме наблюдения за изменениями файлов (watch mode), данный параметр будет равен половине от доступного количества ядер ПК, во избежание фризов системы и чрезмерного потребления ресурсов ПК Jest'ом. Может быть полезно настроить этот параметр в средах выполнения кода с ограниченными ресурсами, например в CI средах. Значение по умолчанию должно быть приемлемым для остальных вариантов использования.
Для окружений с переменным количеством доступных ядер процессора можно указать значение в процентах, например 50% от переменного кол-ва ядер ЦП: --maxWorkers=50%
--config=
Псевдоним: -c . Путь к файлу конфигурации Jest, в котором указывается где искать и как выполнять тесты. Если в конфигурации не задан rootDir , тогда каталог с конфигурационным файлом будет считаться rootDir для проекта. Для задания данной опции может быть использовано JSON-значение, которое Jest будет использовать как конфигурацию.
--roots
Список путей к директориями, в которых Jest должен искать файлы с тестами.
Параметры
CLI options take precedence over values from the Configuration.
--restoreMocks
Automatically restore mock state and implementation before every test. Equivalent to calling jest.restoreAllMocks() before each test. This will lead to any mocks having their fake implementations removed and restores their initial implementation.
--runInBand
Псевдоним: -i . Последовательно выполняет все тесты в текущем процессе вместо создания пула дочерних рабочих процессов, которые выполняют тесты. Может быть полезно для отладки.
--testRunner=
Позволяет указать сторонний исполнитель тестов.
--testRunner=
Позволяет указать сторонний исполнитель тестов.
--reporters
Запуск тестов с указанными генераторами отчетов. Параметры генераторов отчета недоступны через командную строку. Пример с несколькими генераторами отчетов:
jest --reporters="default" --reporters="jest-junit"
--selectProjects .
Run the tests of the specified projects. Jest использует атрибут displayName из конфигурации для идентификации каждого проекта. Если вы используете эту опцию, вы должны указать displayName во всех ваших проектах.
Справка
При запуске Jest с аргументом этот аргумент интерпретируется как регулярное выражение, сопоставляемое c файлами в вашем проекте. Это позволяет запустить наборы тестов, предоставляя шаблон. Будут выбраны и выполнены только те файлы, которые соответствуют шаблону. В зависимости от терминала, может понадобится заключить аргумент в кавычки: jest "my.*(complex)?pattern" . On Windows, you will need to use / as a path separator or escape \ as \\ .
Псевдоним: -b . Выход из набора тестов сразу после n неудачных тестов. По умолчанию 1 .
--shard
The test suite shard to execute in a format of (?\d+)/(?\d+) .
shardIndex describes which shard to select while shardCount controls the number of shards the suite should be split into.
shardIndex and shardCount have to be 1-based, positive numbers, and shardIndex has to be lower than or equal to shardCount .
When shard is specified the configured testSequencer has to implement a shard method.
For example, to split the suite into three shards, each running one third of the tests:
--ignoreProjects .
Ignore the tests of the specified projects. Jest использует атрибут displayName из конфигурации для идентификации каждого проекта. Если вы используете эту опцию, вы должны указать displayName во всех ваших проектах.
Создание базового файла конфигурации. Jest задаст несколько вопросов, чтобы сгенерировать файл jest.config.js с коротким описанием каждой опции.
--version
Псевдоним: -v . Печатает текущую версию и выходит.
--coverage[=]
Аналог: --collectCoverage . Указывает, что следует собирать и отображать информацию о тестовом покрытии. Возможно передать для переопределения параметров, установленных в конфигурации.
--clearCache
Удаляет директорию с кэшом Jest и завершает процесс без запуска тестов. Опция cacheDirectory используется для указания директории с кэшом. Если её пропустить, Jest удалит кэш-директорию по-умолчанию. Чтобы узнать, где находится кэш-директория по умолчанию, вызовите следующую комманду: jest --showConfig .
Clearing the cache will reduce performance.
Is it possible to apply test-driven development principles with snapshot testing?
Although it is possible to write snapshot files manually, that is usually not approachable. Snapshots help to figure out whether the output of the modules covered by tests is changed, rather than giving guidance to design the code in the first place.
Утилита командной строки jest имеет ряд полезных опций. Вы можете выполнить команду jest --help для просмотра всех доступных параметров. Многие из них могут использоваться совместно друг с другом для запуска тестов именно так, как вы хотите. Каждый из конфигурационных параметров Jest может также быть настроен через командную строку.
Вот их краткий обзор:
3. Use descriptive snapshot names
Always strive to use descriptive test and/or snapshot names for snapshots. The best names describe the expected snapshot content. This makes it easier for reviewers to verify the snapshots during review, and for anyone to know whether or not an outdated snapshot is the correct behavior before updating.
Since the later describes exactly what's expected in the output, it's more clear to see when it's wrong:
--testSequencer=
Lets you specify a custom test sequencer. Please refer to the testSequencer configuration for details.
--testLocationInResults
Adds a location field to test results. Useful if you want to report the location of a test in a reporter.
Note that column is 0-indexed while line is not.
--watch
Наблюдает за изменениями в файлах и перезапускает тесты связанные с измененными файлами. Если вместо этого необходимо перезапускать все тесты, используйте флаг --watchAll .
Запуск через yarn
Если вы запустите Jest через yarn test , вы можете передать аргументы командной строки прямо как Jest аргументы.
вы можете использовать:
--changedSince
Запускает тесты, которые затрагивают изменения в указанной ветке или коммите. Если рабочая ветка не совпадает с указанной, тогда будут протестированны только локальные изменения. Похожая опция: --onlyChanged .
При указании этой опции Jest будет считать, что выполняется в CI-среде. В этом случае меняется поведение при обнаружении новых тестов со снимками. Вместо того, чтобы автоматически сохранить новый снимок, Jest будет считать тест проваленным, если запущен без --updateSnapshot .
--clearMocks
Automatically clear mock calls, instances, contexts and results before every test. Equivalent to calling jest.clearAllMocks() before each test. This does not remove any mock implementation that may have been provided.
--changedSince
Запускает тесты, которые затрагивают изменения в указанной ветке или коммите. Если рабочая ветка не совпадает с указанной, тогда будут протестированны только локальные изменения. Похожая опция: --onlyChanged .
При указании этой опции Jest будет считать, что выполняется в CI-среде. В этом случае меняется поведение при обнаружении новых тестов со снимками. Вместо того, чтобы автоматически сохранить новый снимок, Jest будет считать тест проваленным, если запущен без --updateSnapshot .
--verbose
Отображает результаты отдельных в иерархии набора тестов.
--cache
Нужно ли использовать кэш. По умолчанию используется значение true. Отключить использование кэша можно с помощью флага --no-cache .
The cache should only be disabled if you are experiencing caching related problems. On average, disabling the cache makes Jest at least two times slower.
Чтобы посмотреть содержимое кэша используйте аргумент --showConfig и значение cacheDirectory . Для очистки кэша добавьте --clearCache .
--verbose
Отображает результаты отдельных в иерархии набора тестов.
--expand
--detectOpenHandles
Attempt to collect and print open handles preventing Jest from exiting cleanly. Use this in cases where you need to use --forceExit in order for Jest to exit to potentially track down the reason. This implies --runInBand , making tests run serially. Реализовано с использованием async_hooks . Эта опция существенно снижает производительность и поэтому рекоммендуется использовать её только при отладке.
Тестовое окружение, используемое для всех тестов. Может указывать на любой node-модуль или файл. Примеры: jsdom , node или путь/к/окружению.js .
Параметры
CLI options take precedence over values from the Configuration.
--expand
--clearMocks
Automatically clear mock calls, instances, contexts and results before every test. Equivalent to calling jest.clearAllMocks() before each test. This does not remove any mock implementation that may have been provided.
--filter=
Путь к модулю, экспортирующему функцию фильтрации. This asynchronous function receives a list of test paths which can be manipulated to exclude tests from running by returning an object with the "filtered" property. Especially useful when used in conjunction with a testing infrastructure to filter known broken, e.g.
--testEnvironmentOptions=
A JSON string with options that will be passed to the testEnvironment . The relevant options depend on the environment.
--detectOpenHandles
Attempt to collect and print open handles preventing Jest from exiting cleanly. Use this in cases where you need to use --forceExit in order for Jest to exit to potentially track down the reason. This implies --runInBand , making tests run serially. Реализовано с использованием async_hooks . Эта опция существенно снижает производительность и поэтому рекоммендуется использовать её только при отладке.
Тестовое окружение, используемое для всех тестов. Может указывать на любой node-модуль или файл. Примеры: jsdom , node или путь/к/окружению.js .
--coverageProvider=
Indicates which provider should be used to instrument code for coverage. Допустимые значения: babel (по умолчанию) или v8 .
Note that using v8 is considered experimental. This uses V8's builtin code coverage rather than one based on Babel. It is not as well tested, and it has also improved in the last few releases of Node. Using the latest versions of node (v14 at the time of this writing) will yield better results.
--changedFilesWithAncestor
Запускает тесты для файлов с текущими изменениями, а также для файлов, которые были измененны в предыдущем коммите. Похожая опция: --onlyChanged .
Использование со скриптами npm
Если вы запускаете Jest с помощью npm test , то вы по-прежнему можете использовать аргументы командной строки путем добавления -- между командой npm test и аргументами Jest.
вы можете использовать:
--clearCache
Удаляет директорию с кэшом Jest и завершает процесс без запуска тестов. Опция cacheDirectory используется для указания директории с кэшом. Если её пропустить, Jest удалит кэш-директорию по-умолчанию. Чтобы узнать, где находится кэш-директория по умолчанию, вызовите следующую комманду: jest --showConfig .
Clearing the cache will reduce performance.
--resetMocks
Automatically reset mock state before every test. Equivalent to calling jest.resetAllMocks() before each test. This will lead to any mocks having their fake implementations removed but does not restore their initial implementation.
--watchAll
Наблюдает за изменениями в файлах и перезапускает тесты, если что-то изменяется. Если необходимо перезапускать только тесты для измененных файлов, используйте флаг --watch .
Используйте --watchAll=false , чтобы явно отключить режим наблюдения. Обратите внимание, что в большинстве окружений непрерывной интеграции (CI) это осуществляется автоматически.
--lastCommit
Выполнит все тесты, которые были связаны с изменёнными файлами в последнем коммите. Похожая опция: --onlyChanged .
--runTestsByPath
Запускает тесты, к которым указаны конкретные пути.
The default regex matching works fine on small runs, but becomes slow if provided with multiple patterns and/or against a lot of tests. This option replaces the regex matching logic and by that optimizes the time it takes Jest to filter specific test files.
Inline Snapshots
Inline snapshots behave identically to external snapshots ( .snap files), except the snapshot values are written automatically back into the source code. This means you can get the benefits of automatically generated snapshots without having to switch to an external file to make sure the correct value was written.
Example:
First, you write a test, calling .toMatchInlineSnapshot() with no arguments:
The next time you run Jest, tree will be evaluated, and a snapshot will be written as an argument to toMatchInlineSnapshot :
That's all there is to it! You can even update the snapshots with --updateSnapshot or using the u key in --watch mode.
By default, Jest handles the writing of snapshots into your source code. However, if you're using prettier in your project, Jest will detect this and delegate the work to prettier instead (including honoring your configuration).
Читайте также: