diff --git a/Makefile b/Makefile index 38ccaf229a..baf6e1298e 100644 --- a/Makefile +++ b/Makefile @@ -199,7 +199,7 @@ eslint: node_modules $(ESLINT) spec/ --global converse .PHONY: check -check: dev eslint +check: eslint | dist/converse.js dist/converse.css $(KARMA) start karma.conf.js $(ARGS) .PHONY: test diff --git a/docs/source/testing.rst b/docs/source/testing.rst index e8a3b2aaeb..d1f66a6cf8 100644 --- a/docs/source/testing.rst +++ b/docs/source/testing.rst @@ -1,19 +1,68 @@ Automated tests =============== -Converse uses the `Jasmine `_ testing framework for -writing tests. +Converse uses the `Karma `_ test runner and +`Jasmine `_ testing library for running tests. -Adding tests for your bugfix or feature ----------------------------------------- +In addition, we use `ESlint `_ to run a static analysis (aka +linting) of the source files and report errors. -Take a look at `tests/index.html `_ -and the `spec files `_ -to see how tests are implemented. +Whenever a commit is pushed to the Converse Github repo, all ESlint checks and +Jasmine tests are run on `Travis CI `_. Running tests ------------- -Check that all tests complete sucessfully. +You can run ESlint by typing ``make eslint``. Similarly the tests can be run via ``make tests``. -Run ``make check`` in your terminal. +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`` or ``make check`` in another. + +``make watch`` will build development bundles of Converse.js (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 few minutes 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: + +.. code-block:: javascript + + 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``.