Update docs for auto js file discovery

This patch updates the docs following the merge of most of the auto js
file discovery patches.

It also fixes a few minor issues with the documentation.

Change-Id: I419b7c861683ccb67f0cbadac666627602e3006c
Partially-Implements: blueprint angular-docs
This commit is contained in:
Rob Cresswell 2015-07-01 14:08:35 +01:00
parent 653f85444f
commit ef41525cef
3 changed files with 78 additions and 57 deletions

View File

@ -64,19 +64,26 @@ is likely to be used across many parts of horizon.
When adding code to horizon, consider whether it is panel-specific or should be When adding code to horizon, consider whether it is panel-specific or should be
broken out as a reusable utility or widget. broken out as a reusable utility or widget.
Panel-specific code is in ``openstack_dashboard/static/dashboard/``.
The modal directive is a good example of the file structure. This is a reusable The modal directive is a good example of the file structure. This is a reusable
component: component:
:: ::
horizon/static/framework/widgets/modal/ horizon/static/framework/widgets/modal/
├── modal.controller.js ├── modal.controller.js
├── modal.service.js
├── modal.module.js ├── modal.module.js
├── modal.service.js
├── modal.spec.js ├── modal.spec.js
└── simple-modal.html └── simple-modal.html
Panel-specific code is in ``openstack_dashboard/static/dashboard/``. For example:
::
openstack_dashboard/static/dashboard/workflow/
├── decorator.service.js
├── workflow.module.js
├── workflow.module.spec.js
└── workflow.service.js
For larger components, such as workflows with multiple steps, consider breaking For larger components, such as workflows with multiple steps, consider breaking
the code down further. The Angular **Launch Instance** workflow, the code down further. The Angular **Launch Instance** workflow,
for example, has one directory per step for example, has one directory per step
@ -85,10 +92,12 @@ for example, has one directory per step
Testing Testing
======= =======
1. Open <dev_server_ip>/jasmine in a browser. The development server can be run 1. Open <dev_server_ip:port>/jasmine in a browser. The development server can be run
with``./run_tests.sh --runserver`` from the horizon root directory. with``./run_tests.sh --runserver`` from the horizon root directory.
2. ``npm run test`` from the horizon root directory. 2. ``npm run test`` from the horizon root directory.
The code linting job can be run with ``npm run lint``.
For more detailed information, see :doc:`javascript_testing`. For more detailed information, see :doc:`javascript_testing`.
Translation (Internationalization and Localization) Translation (Internationalization and Localization)
@ -124,9 +133,8 @@ Creating your own panel
as an example. as an example.
.. Note:: .. Note::
File inclusion is likely to be automated soon, after this Currently, Angular module names must still be manually declared with
`blueprint <https://blueprints.launchpad.net/horizon/+spec/auto-js-file-finding>`_ ``ADD_ANGULAR_MODULES``, even when using automatic file discovery.
is completed.
This section serves as a basic introduction to writing your own panel for This section serves as a basic introduction to writing your own panel for
horizon, using AngularJS. A panel may be included with the plugin system, or it may be horizon, using AngularJS. A panel may be included with the plugin system, or it may be
@ -135,36 +143,23 @@ part of the upstream horizon project.
Upstream Upstream
-------- --------
If you are adding a panel to horizon, add the relevant ``.js`` and ``.spec.js`` JavaScript files can be discovered automatically, handled manually, or a mix of
files to one of the dashboards in ``openstack_dashboard/enabled/``. the two. Where possible, use the automated mechanism.
An example can be found at ``openstack_dashboard/enabled/_10_project.py``: To use the automatic functionality, add::
:: AUTO_DISCOVER_STATIC_FILES = True
to your ``enabled/___.py``. To make this possible, you need to follow some
structural conventions:
LAUNCH_INST = 'dashboard/launch-instance/' - Static files should be put in a ``static/`` folder, which should be found directly under
the folder for the dashboard/panel/panel groups Python package.
- JS code that defines an Angular module should be in a file with extension of ``.module.js``.
- JS code for testing should be named with extension of ``.mock.js`` and of ``.spec.js``.
- Angular templates should have extension of ``.html``.
ADD_JS_FILES = [ You can read more about the functionality in the
... :ref:`auto_discover_static_files` section of the settings documentation.
LAUNCH_INST + 'launch-instance.js',
LAUNCH_INST + 'launch-instance.model.js',
LAUNCH_INST + 'source/source.js',
LAUNCH_INST + 'flavor/flavor.js',
...
]
ADD_JS_SPEC_FILES = [ To manually add files, add the following arrays and file paths to the enabled file:
...
LAUNCH_INST + 'launch-instance.spec.js',
LAUNCH_INST + 'launch-instance.model.spec.js',
LAUNCH_INST + 'source/source.spec.js',
LAUNCH_INST + 'flavor/flavor.spec.js',
...
]
Plugins
-------
Add a new panel/ panel group/ dashboard (See :doc:`tutorial`). Add your files
to the relevant arrays in your new enabled files:
:: ::
ADD_JS_FILES = [ ADD_JS_FILES = [
@ -178,3 +173,33 @@ to the relevant arrays in your new enabled files:
'path_to/my_angular_code.spec.js', 'path_to/my_angular_code.spec.js',
... ...
] ]
ADD_ANGULAR_MODULES = [
...
'angular.module',
...
]
Plugins
-------
Add a new panel/ panel group/ dashboard (See :doc:`tutorial`). JavaScript file
inclusion is the same as the Upstream process.
To include external stylesheets, you must ensure that ``ADD_SCSS_FILES`` is
defined in your enabled file, and add the relevant filepath, as below:
::
ADD_SCSS_FILES = [
...
'path_to/my_styles.scss',
...
]
.. warning::
We highly recommend using a single SCSS file for your plugin. SCSS supports
nesting with @import, so if you have multiple files (i.e. per panel styling)
it is best to import them all into one, and include that single file. You can
read more in the `SASS documentation`_.
.. _SASS documentation: http://sass-lang.com/documentation/file.SASS_REFERENCE.html#import

View File

@ -30,7 +30,7 @@ Running Tests
Tests can be run in two ways: Tests can be run in two ways:
1. Open <dev_server_ip>/jasmine in a browser. The development server can be 1. Open <dev_server_ip:port>/jasmine in a browser. The development server can be
run with ``./run_tests.sh --runserver`` from the horizon root directory. run with ``./run_tests.sh --runserver`` from the horizon root directory.
2. ``npm run test`` from the horizon root directory. This runs Karma, 2. ``npm run test`` from the horizon root directory. This runs Karma,
so it will run all the tests against PhantomJS and generate coverage so it will run all the tests against PhantomJS and generate coverage
@ -53,11 +53,6 @@ found at ``horizon/.coverage-karma/`` (framework tests) and
Writing Tests Writing Tests
============= =============
.. Note::
File inclusion is likely to be automated soon, after this
`blueprint <https://blueprints.launchpad.net/horizon/+spec/auto-js-file-finding>`_
is completed.
Jasmine uses suites and specs: Jasmine uses suites and specs:
* Suites begin with a call to ``describe``, which takes two parameters; a * Suites begin with a call to ``describe``, which takes two parameters; a
string and a function. The string is a name or title for the spec suite, string and a function. The string is a name or title for the spec suite,
@ -68,25 +63,24 @@ Jasmine uses suites and specs:
the code. An expectation in Jasmine is an assertion that is either true or the code. An expectation in Jasmine is an assertion that is either true or
false; every expectation in a spec must be true for the spec to pass. false; every expectation in a spec must be true for the spec to pass.
Horizon Tests ``.spec.js`` files can be handled manually or automatically. To use the
------------- automatic file discovery add::
AUTO_DISCOVER_STATIC_FILES = True
to your enabled file. JS code for testing should use the extensions
``.mock.js`` and ``.spec.js``.
Horizon tests are included in You can read more about the functionality in the
``horizon/test/jasmine/jasmine_tests.py``. :ref:`auto_discover_static_files` section of the settings documentation.
Add your test to the ``specs`` array, code sources to the ``dashboard_sources`` To manually add specs, add the following array and relevant file paths to your
array, and any templates to the ``externalTemplates`` array. Horizon tests enabled file:
cover reusable components, as well as api functionality, whilst dashboard ::
tests cover specific panels and their logic. The tests themselves are kept in
the same directory as the implementation they are testing.
OpenStack Dashboard Tests ADD_JS_SPEC_FILES = [
------------------------- ...
'path_to/my_angular_code.spec.js',
Dashboard tests are included in the relevant dashboard enabled file, such as ...
``openstack_dashboard/enabled/_10_project.py``. ]
Add your tests to the ``ADD_JS_SPEC_FILES`` array.
Examples Examples
======== ========
@ -104,8 +98,8 @@ File tree:
horizon/static/framework/widgets/modal horizon/static/framework/widgets/modal
├── modal.controller.js ├── modal.controller.js
├── modal.service.js
├── modal.module.js ├── modal.module.js
├── modal.service.js
└── modal.spec.js └── modal.spec.js
Lines added to ``horizon/test/jasmine/jasmine_tests.py``: Lines added to ``horizon/test/jasmine/jasmine_tests.py``:

View File

@ -1247,6 +1247,8 @@ A list of scss files to be included in the compressed set of files that are
loaded on every page. We recommend one scss file per dashboard, use @import if loaded on every page. We recommend one scss file per dashboard, use @import if
you need to include additional scss files for panels. you need to include additional scss files for panels.
.. _auto_discover_static_files:
``AUTO_DISCOVER_STATIC_FILES`` ``AUTO_DISCOVER_STATIC_FILES``
------------------------------ ------------------------------