[TASK] Update tags for all rst files for 8.2
[Packages/TYPO3.CMS.git] / typo3 / sysext / core / Documentation / Changelog / 8.2 / Feature-76590-IntroduceUnitTestsForJavaScript.rst
1
2 .. include:: ../../Includes.txt
3
4 ====================================================
5 Feature: #76590 - Introduce UnitTests for JavaScript
6 ====================================================
7
8 See :issue:`76590`
9
10 Description
11 ===========
12
13 The core uses karma as test runner and jasmine as testing framework for JavaScript UnitTests.
14 The tests will be run on travis with PhantomJS.
15 Locally other browsers like Chrome, Firefox, Safari or IE can be used as well.
16
17 To run the UnitTests on a local system the following steps are necessary:
18
19 1. Install dependencies
20
21 .. code-block:: bash
22
23    cd Build
24    npm install
25    cd ..
26
27 2. Run the tests from your terminal
28
29 .. code-block:: bash
30
31    # Execute the tests only once
32    ./Build/node_modules/karma/bin/karma start typo3/sysext/core/Build/Configuration/JSUnit/karma.conf.js --single-run
33
34    # Execute the tests for every change (file watcher mode)
35    ./Build/node_modules/karma/bin/karma start typo3/sysext/core/Build/Configuration/JSUnit/karma.conf.js
36
37    # Execute the tests for different browser
38    ./Build/node_modules/karma/bin/karma start typo3/sysext/core/Build/Configuration/JSUnit/karma.conf.js --single-run --browsers Chrome,Safari,Firefox
39
40
41 Test-Files
42 ==========
43
44 Any test file must be located in extension folder `typo3/sysext/<EXTKEY>/Tests/JavaScript/`
45 The filename must end with Test.js, e.g. `GridEditorTest.js`
46 Each test file must be implemented as AMD module, must use strict mode and has to use :js:`describe` with module name as outer wrap for each test.
47 The following code block shows a good example:
48
49 .. code-block:: javascript
50
51    define(['jquery', 'TYPO3/CMS/Backend/AnyModule'], function($, AnyModule) {
52       'use strict';
53       // first and outer wrap describe the test class name
54       describe('TYPO3/CMS/Backend/AnyModuleTest:', function() {
55          // second wrap describe the method to test
56          describe('tests for fooAction', function() {
57             // the first parameter of each 'it' method describe the test-case.
58             it('works for parameter a and b', function() {});
59          });
60          describe('tests for barAction', function() {
61             it('works for parameter a and b', function() {});
62          });
63       }
64    }
65
66 Please take a look at the existing test files and read the jasmine documentation for further information.
67
68 DataProvider for tests
69 ----------------------
70
71 For testing a set of values, the core implement a kind of DataProvider. To use the DataProvider you have to use the function :js:`using`.
72 Please take a look at `FormEngineValidationTest.js` for an example.
73
74 .. index:: JavaScript