# UnitTestBot JavaScript
[UnitTestBot](https://www.utbot.org/) is the tool for automated unit test generation available as an IntelliJ IDEA plugin, or a command-line interface.
Now UnitTestBot provides fuzzing-based support for JavaScript.
## IntelliJ IDEA plugin
### Requirements
1. IntelliJ IDEA Ultimate â for compatibility, see [UnitTestBot on JetBrains Marketplace](https://plugins.jetbrains.com/plugin/19445-unittestbot/versions).
2. UnitTestBot plugin: please refer to [UnitTestBot user guide](https://github.com/UnitTestBot/UTBotJava/wiki/Install-or-update-plugin).
3. [Node.js 10.0.0 or later](https://nodejs.org/en/download/) (we recommend that you add Node.js to environment variables)
_Note:_ when _npm_ cannot install requirements, try troubleshooting.
1. If the system prohibits installation: run _cmd_ via `sudo` or with administrator access, run `npm install -g `.
2. If Node.js is missing, or _npm_ is not installed: install Node.js with default configuration from the official website.
### How to use
1. In your IntelliJ IDEA, go to **File** > **Settings** > **Tools**, choose **UnitTestBot** and enable **Experimental languages support**.
**(!) NOTE:** be sure to enable this option for **_each_** project.
2. Go to **File** > **Settings** > **Languages & Frameworks**, choose **Node.js** and check if the path to Node.js executable file is specified.
3. In a JavaScript file, press **Alt+Shift+U** to open the generation dialog.
## Command-line interface (CLI)
### Build
JAR file can be built in [GitHub Actions](https://github.com/UnitTestBot/UTBotJava/actions/workflows/publish-plugin-and-cli-from-branch.yml) with the `publish-plugin-and-cli-from-branch` script.
### Requirements
* [Node.js 10.0.0 or later](https://nodejs.org/en/download/)
* [Java 11 or later](https://www.oracle.com/java/technologies/downloads/)
* _nyc_ 15.1.0 or later: `> npm install -g nyc`
* Mocha 10.0.0 or later: `> npm install -g mocha`
_Note:_ for each new project, _npm_ needs internet connection to install the required packages.
### Generate tests: `generate_js`
java -jar utbot-cli.jar generate_js --source="dir/file_with_sources.js" --output="dir/generated_tests.js"
This will generate tests for top-level functions from `file_with_sources.js`.
#### Options
- `-s, --source `
_(required)_ Source code file for test generation.
- `-c, --class `
Specifies the class to generate tests for.
If not specified, tests for top-level functions or a single class are generated.
- `-o, --output `
File for generated tests.
- `-p, --print-test`
Specifies whether a test should be printed out to `StdOut` (default = false).
- `-t, --timeout `
Timeout for a single test case to generate: in seconds (default = 15).
- `--coverage-mode `
Specifies the coverage mode for test generation (used for coverage-based optimization). For now, the fast mode cannot deal with exceeding timeouts, but works faster (default = FAST). Do not use the fast mode if you guess there might be infinite loops in your code.
- `--path-to-node `
Sets a path to Node.js executable (default = "node").
- `--path-to-nyc `
Sets a path to _nyc_ executable (default = "nyc").
- `--path-to-npm `
Sets a path to _npm_ executable (default = "npm").
### Run generated tests: `run_js`
java -jar utbot-cli.jar run_js --fileOrDir="generated_tests.js"
This will run generated tests from a file or directory.
#### Options
- `-f, --fileOrDir`
_(required)_ File or directory with tests.
- `-o, --output`
Specifies the output TXT file for a test framework result (if empty, prints the result to `StdOut`).
- `-t, --test-framework `
Test framework to use for test running (default = "Mocha").
### Generate a coverage report: `coverage_js`
java -jar utbot-cli.jar coverage_js --source=dir/generated_tests.js
This will generate a coverage report for generated tests and print it to `StdOut`.
#### Options
- `-s, --source `
_(required)_ File with tests to generate a report for.
- `-o, --output`
Specifies the output JSON file for a coverage report (if empty, prints the report to `StdOut`).
- `--path-to-nyc `
Sets a path to _nyc_ executable (default = "nyc").