Browse Source

fix(nocodb): Added env configuration to unit test and added that to docs as well

pull/3721/head
Muhammed Mustafa 2 years ago
parent
commit
afcaad572f
  1. 66
      packages/noco-docs/content/en/engineering/testing.md
  2. 1
      packages/nocodb/.gitignore
  3. 4
      packages/nocodb/tests/unit/.env.copy
  4. 5
      packages/nocodb/tests/unit/index.test.ts

66
packages/noco-docs/content/en/engineering/testing.md

@ -1,46 +1,70 @@
--- ---
title: "Writing Tests" title: "Writing Unit Tests"
description: "Overview to testing" description: "Overview to unit testing"
position: 3250 position: 3250
category: "Engineering" category: "Engineering"
menuTitle: "Testing" menuTitle: "Unit tests"
--- ---
## API Tests ## Pre-requisites
### Pre-requisites
- MySQL is preferrable - however we fallback to SQLite - MySQL is preferrable - however we fallback to SQLite
### Setup ## Setup
- All the tests are in `packages/nocodb` folder, which will be our working directory. Use the following command to get into that folder.
```bash
cd packages/nocodb
``` ```
cp scripts/.env.copy scripts/.env
open scripts/.env - Install the dependencies for `nocodb` package
# Edit the following env variables ```bash
# `DB_USER` : mysql username npm install
# `DB_PASSWORD` : mysql password
# `DB_HOST` : mysql host
# `DB_PORT` : mysql port
``` ```
### Running tests ### Environment variables
- Add your `env` file with the following command
``` ```
cd packages/nocodb cp tests/unit/.env.copy tests/unit/.env
```
- Open the `.env` file
```
open tests/unit/.env
````
- Configure the following variables
> DB_USER : mysql username </br>
> DB_PASSWORD : mysql password </br>
> DB_HOST : mysql host </br>
> DB_PORT : mysql port </br>
## How to run tests
```
npm run test:unit npm run test:unit
``` ```
### Notes ## Key points
#### Key points
- All individual unit tests are independent of each other. We don't use any shared state between tests. - All individual unit tests are independent of each other. We don't use any shared state between tests.
- Test environment includes `sakila` sample database and any change to it by a test is reverted before running other tests. - Test environment includes `sakila` sample database and any change to it by a test is reverted before running other tests.
- While running unit tests, it tries to connect to mysql server running on `localhost:3306` with username `root` and password `password`(which can be configured) and if not found, it will use `sqlite` as a fallback, hence no requirement of any sql server to run tests. - While running unit tests, it tries to connect to mysql server running on `localhost:3306` with username `root` and password `password`(which can be configured) and if not found, it will use `sqlite` as a fallback, hence no requirement of any sql server to run tests.
#### Walk through of writing a unit test ### Walk through of writing a unit test
We will create an `Table` test suite as an example.
We will create an `Table` test suite as an example.
##### Configure test #### Configure test
We will configure `beforeEach` which is called before each test is executed. We will use `init` function from `nocodb/packages/tests/unit/init/index.ts`, which is a helper function which configures the test environment(i.e resetting state, etc.). We will configure `beforeEach` which is called before each test is executed. We will use `init` function from `nocodb/packages/tests/unit/init/index.ts`, which is a helper function which configures the test environment(i.e resetting state, etc.).

1
packages/nocodb/.gitignore vendored

@ -18,3 +18,4 @@ noco.db*
/docker/main.js /docker/main.js
test_meta.db test_meta.db
test_sakila.db test_sakila.db
.env

4
packages/nocodb/tests/unit/.env.copy

@ -0,0 +1,4 @@
DB_USER=root
DB_PASSWORD=password
DB_PORT=3306
DB_HOST=localhost

5
packages/nocodb/tests/unit/index.test.ts

@ -3,12 +3,17 @@ import 'mocha';
import restTests from './rest/index.test'; import restTests from './rest/index.test';
import modelTests from './model/index.test'; import modelTests from './model/index.test';
import TestDbMngr from './TestDbMngr' import TestDbMngr from './TestDbMngr'
import dotenv from 'dotenv';
process.env.NODE_ENV = 'test'; process.env.NODE_ENV = 'test';
process.env.TEST = 'test'; process.env.TEST = 'test';
process.env.NC_DISABLE_CACHE = 'true'; process.env.NC_DISABLE_CACHE = 'true';
process.env.NC_DISABLE_TELE = 'true'; process.env.NC_DISABLE_TELE = 'true';
// Load environment variables from .env file
dotenv.config({
path: __dirname + '/.env'
});
(async function() { (async function() {
await TestDbMngr.init(); await TestDbMngr.init();

Loading…
Cancel
Save