Josh Soref e95d085be6 Spelling tests (#10920) 3 years ago
..
acls 325857ef07 Common pattern for web and alarms together with two bug fixes (#6783) 5 years ago
alarm_repetition 7de64f49ff Add a plugin for the system clock synchronization state (#10895) 3 years ago
api 7b3f17d324 Building a fuzzer against the API (issue #7163) (#7210) 5 years ago
backends 880da6db0e Add more metrics to the tests (#6074) 5 years ago
health_mgmtapi 46a8075c8f Docs housekeeping for SEO and syntax, part 1 (#10388) 4 years ago
installer f39406c9b6 Spelling build (#10428) 3 years ago
k6 278f062dc1 Initial script for API load testing (#5892) 5 years ago
node.d e95d085be6 Spelling tests (#10920) 3 years ago
profile e95d085be6 Spelling tests (#10920) 3 years ago
template_dimension f39406c9b6 Spelling build (#10428) 3 years ago
urls 325857ef07 Common pattern for web and alarms together with two bug fixes (#6783) 5 years ago
web e8915e2653 Add SPDX-License-Identifier headers to most files. 6 years ago
Makefile.am 675383b26a Makefile.am files indentation (#7252) 5 years ago
README.md 46a8075c8f Docs housekeeping for SEO and syntax, part 1 (#10388) 4 years ago
lifecycle.bats b63d58f1c8 Add a random offset to the update script when running non-interactively. (#9245) 4 years ago
run-unit-tests.sh c999f89754 Migrate Tests from Travis CI to Github Workflows (#8331) 5 years ago
stress.sh 325857ef07 Common pattern for web and alarms together with two bug fixes (#6783) 5 years ago
updater_checks.bats f39406c9b6 Spelling build (#10428) 3 years ago
updater_checks.sh f39406c9b6 Spelling build (#10428) 3 years ago

README.md

Testing

This readme is a manual on how to get started with unit testing on javascript and nodejs

Original author: BrainDoctor (github), July 2017

Installation

Tested on Linux Mint 18.2 Sara (Ubuntu/debian derivative)

Make sure you are the user who is developer (permissions, except sudo ofc)

sudo apt-get install nodejs npm chromium-browser

cd /path/to/your/netdata
npm install

That should install the necessary node modules.

Other browsers work too (Chrome, Firefox). However, only the Chromium Browser 59 has been tested for headless unit testing.

Versions

The commands above leave me with the following versions (July 2017):

  • nodejs: v4.2.6
  • npm: 3.5.2
  • chromium-browser: 59.0.3071.109
  • WebStorm (optional): 2017.1.4

Configuration

NPM

The dependencies are installed in netdata/package.json. If you install a new NPM module, it gets added here. Future developers just need to execute npm install and every dep gets added automatically.

Karma

Karma configuration is in tests/web/karma.conf.js. Documentation is provided via comments.

WebStorm

If you use the JetBrains WebStorm IDE, you can integrate the karma runtime.

for Karma (Client side testing)

Headless Chromium:

  1. Run > Edit Configurations
  2. "+" > Karma
  3. - Name: Karma Headless Chromium
    • Configuration file: /path/to/your/netdata/tests/web/karma.conf.js
    • Browsers to start: ChromiumHeadless
    • Node interpreter: /usr/bin/nodejs (MUST be absolute, NVM works too)
    • Karma package: /path/to/your/netdata/node_modules/karma

GUI Chromium is similar:

  1. Run > Edit Configurations
  2. "+" > Karma
  3. - Name: Karma Chromium
    • Configuration file: /path/to/your/netdata/tests/web/karma.conf.js
    • Browsers to start: Chromium
    • Node interpreter: /usr/bin/nodejs (MUST be absolute, NVM works too)
    • Karma package: /path/to/your/netdata/node_modules/karma

You may add other browsers too (comma separated). With the "Browsers to start" field you can override any settings in karma.conf.js.

Also it is recommended to install WebStorm IDE Extension/Addon to Chrome/Chromium for awesome debugging.

for node.d plugins (nodejs)

  1. Run > Edit Configurations
  2. "+" > Node.js
  3. - Name: Node.d plugins
    • Node interpreter: /usr/bin/nodejs (MUST be absolute, NVM works too)
    • JavaScript file: node_modules/jasmine-node/bin/jasmine-node
    • Application parameters: --captureExceptions tests/node.d

Running

In WebStorm

Karma

Just run the configured run configurations and they produce nice test trees:

karma_run_2

node.js

Debugging is awesome too! node_debug

From CLI

Karma

cd /path/to/your/netdata

nodejs ./node_modules/karma/bin/karma start tests/web/karma.conf.js --single-run=true --browsers=ChromiumHeadless

will start the karma server, start chromium in headless mode and exit.

If a test fails, it produces even a stack trace: karma_run_1

Node.d plugins

cd /path/to/your/netdata

nodejs node_modules/jasmine-node/bin/jasmine-node --captureExceptions tests/node.d

will run the tests in tests/node.d and produce a stacktrace too on error: node_run

Coverage

Karma

A nice HTML is produced from Karma which shows which code paths were executed. It is located somewhere in /path/to/your/netdata/coverage/

coverage_2 and coverage_1

Node.d

Apparently, jasmine-node can produce a junit report with the --junitreport flag. But that output was not very useful. Maybe it's configurable?

CI

The karma and node.d runners can be integrated in Travis (AFAIK), but that is outside my ability.

Note: Karma is for browser-testing. On a build server, no GUI or browser might by available, unless browsers support headless mode.

[analytics](<>)