# Testing

## Running tests

Before running make sure to compile tests with `compile` or `watch` scripts.

To run tests on theia run:

`npm run test`

This will run all CI enabled tests.

If you want to run all tests for a particular Theia extension, execute the following command from the root:

`npx lerna run test --scope @theia/extension-name`

Add the following npm script to the `package.json` of the desired Theia extension, if you would like to enable the watch mode for the tests.

```json
  "test:watch": "theiaext test:watch"
```

After editing the `package.json` you can run the tests in watch mode with:

`npx lerna run test:watch --scope @theia/extension-name`

## Test directory structure

The test directory structure is as follows:

- `src/node/foo.ts`: Code to be tested.
- `src/node/foo.spec.ts`: Unit tests for foo.ts.
- `src/node/test/test-helper.ts`: Any mocks, fixture or utility test code
 goes here.
- `src/node/foo.slow-spec.ts`: Any slow running tests such as integration
 tests should be labeled as such so that they can be excluded.
- `src/browser/foo.ui-spec.ts`: UI tests.
- `test-resources`: Any resources needed for the tests like configuration
 files or scripts.
- `test-resources/ui`: Resources for UI testing.
- `test-resources/slow`: Resources for slow running tests.

## Publishing

### Published test files

Unit tests named as `foo.spec.ts` will be published since they're also for
documentation purposes.

### Unpublished

- `*ui-spec.ts`
- `*slow-spec.ts`
- `test-resources`
