Automated tests

Converse uses the Karma test runner and Jasmine testing library for running tests.

In addition, we use ESlint to run a static analysis (aka linting) of the source files and report errors.

Whenever a commit is pushed to the Converse Github repo, all ESlint checks and Jasmine tests are run on Travis CI.

Running tests

You can run ESlint by typing make eslint. Similarly the tests can be run via make tests.

To run both eslint and the tests, you can use make check.

When running make test or make check, a browser will automatically start up, open a tab at http://localhost:9876 and start running the tests.

You’ll see a green bar at the top of the page, and on the right inside it is a Debug button.

It’s often helpful to click that button and run the tests in debug mode. This way, you see better error output for failed tests.

Automatically run tests on file changes

To automatically run the tests whenever you make a change to any of the Converse source code, you can run make watch in one terminal, and make tests in another.

make watch will build development bundles of Converse (in dist/converse.js and dist/converse.css) and automatically rebuild them whenever a source file is modified.

Similarly, Karma will make sure that the tests are re-executed when the bundle files are rebuilt.

Running individual tests

Converse has over 400 tests, and it can take a while to run through all of them.

When developing on Converse, it’s often preferable to have a more rapid turnaround time between editing a file and checking whether the most relevant tests have passed.

Jasmine tests are described by it functions and the tests names are written to be read as plain English sentences that start with the word it.

For example:

it("is rejected if it's an unencapsulated forwarded message",

Tests are grouped by describe functions, and contained in spec files inside the spec directory.

To run only a single test, you can replace it( with fit( for the particular test that you want to run. You can also do this for multiple tests. All of them will be run whenever make test executes.

To run only a group of tests, you can similarly replace describe( with fdescribe.