https://github.com/shelfio/jest-elasticsearch
Jest preset for running tests with local ElasticSearch
https://github.com/shelfio/jest-elasticsearch
elasticsearch jest jest-preset npm-package
Last synced: 7 days ago
JSON representation
Jest preset for running tests with local ElasticSearch
- Host: GitHub
- URL: https://github.com/shelfio/jest-elasticsearch
- Owner: shelfio
- License: mit
- Created: 2019-08-22T09:27:55.000Z (over 5 years ago)
- Default Branch: master
- Last Pushed: 2025-04-11T21:02:48.000Z (8 days ago)
- Last Synced: 2025-04-11T22:22:34.276Z (8 days ago)
- Topics: elasticsearch, jest, jest-preset, npm-package
- Language: TypeScript
- Size: 142 KB
- Stars: 9
- Watchers: 23
- Forks: 3
- Open Issues: 12
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: license
Awesome Lists containing this project
- awesome-jest - jest-elasticsearch
README
# jest-elasticsearch
> Jest preset for running tests with local ElasticSearch
>
> [How to mock Elasticsearch with Jest?](https://medium.com/shelf-io-engineering/test-elasticsearch-with-jest-like-a-pro-42386713b899)## Usage
### 0. Install
```
$ yarn add @shelf/jest-elasticsearch --dev
```### 1. Create `jest.config.js`
```js
module.exports = {
preset: '@shelf/jest-elasticsearch'
};
```If you have a custom `jest.config.js` make sure you remove `testEnvironment` property, otherwise it will conflict with the preset.
### 2. Create `jest-es-config.js`
```js
module.exports = () => {
return {
esVersion: '8.4.0', // ! must be exact version. Ref: https://github.com/elastic/elasticsearch-js .
// don't be shy to fork our code and update deps to correct.
clusterName: 'your-cluster-name',
nodeName: 'your-node-name',
port: 9200,
indexes: [
{
name: 'your-index-name',
body: {
settings: {
number_of_shards: '1',
number_of_replicas: '1'
},
aliases: {
'your-alias': {}
},
mappings: {
dynamic: false,
properties: {
//here you should paste your mapping
//Example:
id: {
type: 'keyword'
}
}
}
}
}
]
};
};
```### 4. PROFIT! Write tests
```js
it();
```## Monorepo Support
By default the `jest-es-config.js` is read from `cwd` directory, but this might not be suitable for
monorepos with nested [jest projects](https://jestjs.io/docs/configuration#projects-arraystring--projectconfig)
with nested `jest.config.*` files nested in subdirectories.If your `jest-es-config.js` file is not located at `{cwd}/jest-es-config.js` or you are using
nested `jest projects`, you can define the environment variable `JEST_ELASTICSEARCH_CONFIG` with
the absolute path of the respective `jest-es-config.js` file.### Example Using `JEST_ELASTICSEARCH_CONFIG` in nested project
```js
// src/nested/project/jest.config.js
const path = require('path');// Define path of project level config - extension not required as file will be imported
// via `require(process.env.JEST_ELASTICSEARCH_CONFIG)`
process.env.JEST_ELASTICSEARCH_CONFIG = path.resolve(__dirname, './jest-es-config');module.exports = {
preset: '@shelf/jest-elasticsearch'
displayName: 'nested-project',
};
```## Troubleshooting
Issue running tests locally - Exception in thread "main"
```shell
Exception in thread "main'
java.lang.UnsupportedOperationException The Security Manager is deprecated and will be removed in a future release
at java.base/java.lang.System.setSecurityManager(System. java: 416)
at ora.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.iava:71
```The main reason why this issue appears is that you have an incompatible java version installed to run elastic locally.
### What to do?
1. List current java versions
```shell
$ /usr/libexec/java_home -V
```2. If you see version 18.0.x
Add this command to your bashrc, zshrc, etc```shell
$ /usr/libexec/java_home -v 18
```3. If you see no versions or do not have a compatible version installed - Install version 18
https://www.oracle.com/java/technologies/downloads/#java184. Reload the console and check the java version with
```shell
$ java -version
```Output for proper work
```shell
$ java -version
java version "18.0.2.1"
Java(TM) SE Runtime Environment (build 18.0.2.1+1-1)
Java HotSpot(TM) 64-Bit Server VM (build 18.0.2.1+1-1, mixed mode, sharing)
```5. Go to step **2** and set version 18.xx as a default for the shell
> Note: If you need to run elastic <= `v7.17.x` locally, then perform the steps above but for the java version 1.8.xxx
## See Also
- [elasticsearch-local](https://github.com/shelfio/elasticsearch-local)
- [jest-dynamodb](https://github.com/shelfio/jest-dynamodb)
- [jest-mongodb](https://github.com/shelfio/jest-mongodb)## Publish
```sh
$ git checkout master
$ yarn version
$ yarn publish
$ git push origin master --tags
```### Create and publish a GitHub release with your tag
1. Go to repository
2. Select `Releases`
3. Select `Draft a new release`
4. Choose a tag, fill title and describe changes
5. Press a `Publish release`## License
MIT © [Shelf](https://shelf.io)