Skip to content

Latest commit

 

History

History
118 lines (77 loc) · 4.82 KB

watch-mode.md

File metadata and controls

118 lines (77 loc) · 4.82 KB

Watch mode

Translations: Français, Italiano, Русский, 简体中文

AVA comes with an intelligent watch mode. It watches for files to change and runs just those tests that are affected.

Running tests with watch mode enabled

You can enable watch mode using the --watch or -w flags. If you have installed AVA globally:

$ ava --watch

If you've configured it in your package.json like this:

{
  "scripts": {
    "test": "ava"
  }
}

You can run:

$ npm test -- --watch

You could also set up a special script:

{
  "scripts": {
    "test": "ava",
    "watch:test": "ava --watch"
  }
}

And then use:

$ npm run watch:test

Finally you could configure AVA to always run in watch mode by setting the watch key in the ava section of your package.json:

{
  "ava": {
    "watch": true
  }
}

Please note that the TAP reporter is unavailable when using watch mode.

Requirements

AVA uses chokidar as the file watcher. It's configured as an optional dependency since chokidar sometimes can't be installed. Watch mode is not available if chokidar fails to install, instead you'll see a message like:

The optional dependency chokidar failed to install and is required for --watch. Chokidar is likely not supported on your platform.

Please refer to the chokidar documentation for how to resolve this problem.

Source files and test files

In AVA there's a distinction between source files and test files. As you can imagine the test files contain your tests. Source files are all other files that are needed for the tests to run, be it your source code or test fixtures.

By default AVA watches for changes to the test files, package.json, and any other .js files. It'll ignore files in certain directories as provided by the ignore-by-default package.

You can configure patterns for the source files in the ava section of your package.json file, using the source key. This is the recommended way, though you could also use the --source CLI flag.

You can specify patterns to match files in the folders that would otherwise be ignored, e.g. use node_modules/some-dependency/*.js to specify all .js files in node_modules/some-dependency as a source, even though normally all files in node_modules are ignored. Note that you need to specify an exact directory; {bower_components,node_modules}/**/*.js won't work.

If your tests write to disk they may trigger the watcher to rerun your tests. If this occurs you will need to use the --source flag.

Dependency tracking

AVA tracks which source files your test files depend on. If you change such a dependency only the test file that depends on it will be rerun. AVA will rerun all tests if it cannot determine which test file depends on the changed source file.

Dependency tracking works for required modules. Custom extensions and transpilers are supported, provided you loaded them using the --require CLI flag and not from inside your test file. Files accessed using the fs module are not tracked.

Watch mode and the .only modifier

The .only modifier disables watch mode's dependency tracking algorithm. When a change is made, all .only tests will be rerun, regardless of whether the test depends on the changed file.

Manually rerunning all tests

You can quickly rerun all tests by typing r on the console, followed by Enter.

Debugging

Sometimes watch mode does something surprising like rerunning all tests when you thought only a single test would be run. To see its reasoning you can enable a debug mode. This will work best with the verbose reporter:

$ DEBUG=ava:watcher npm test -- --watch --verbose

On Windows use:

$ set DEBUG=ava:watcher
$ npm test -- --watch --verbose

Help us make watch mode better

Watch mode is relatively new and there might be some rough edges. Please report any issues you encounter. Thanks!