kanbanworkflowstimelinescrumrubyroadmapproject-planningproject-managementopenprojectangularissue-trackerifcgantt-chartganttbug-trackerboardsbcf
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
108 lines
3.8 KiB
108 lines
3.8 KiB
Testing the Frontend
|
|
====================
|
|
|
|
Tests are divided into three categories;
|
|
|
|
1. Karma based unit tests (AngularJS components only, standalone)
|
|
2. Capybara/Cucumber/RSpec based tests (feature based and spec based, require the full Rails)
|
|
|
|
All of these are currently run on TravisCI for each push and each Pull Request.
|
|
|
|
## Karma Unit tests
|
|
|
|
__Note__: the default browser for testing is [PhantomJS](http://phantomjs.org). The configuration for all of this can be found at `/frontend/karma.conf.js`.
|
|
|
|
All test files for `karma` live in `./frontend/tests/unit/tests`. There are some `factories` and `mocks` present, which at some point in time were usable via [`rosie.js`](https://github.com/bkeepers/rosie).
|
|
|
|
Karma unit tests can be executed via
|
|
|
|
```
|
|
./frontend/node_modules/.bin/karma start
|
|
```
|
|
|
|
Optionally, if more than the default browser should be used, a `--browsers` flag can be passed:
|
|
|
|
```
|
|
./frontend/node_modules/.bin/karma start --browsers PhantomJS,Firefox
|
|
```
|
|
|
|
By default, this command will wait and watch the test files and run the tests again if something changes. If only one run is required, use a `--single-run` flag.
|
|
|
|
You may also want to use `npm` from the project root:
|
|
|
|
```bash
|
|
# shorthand for ./frontend/node_modules/.bin/karma start --browsers PhantomJS,Firefox --single-run
|
|
$ npm karma
|
|
```
|
|
|
|
The tests use [`mocha`](https://mochajs.org/) for it's test syntax. With a syntax looking like this:
|
|
|
|
```javascript
|
|
describe('my new feature', function() {
|
|
/* tests */
|
|
});
|
|
```
|
|
|
|
Individual parts of the test suite can easily be run independently from the suite by adding `.only` to the DSLs constructs (`describe`, `context`, `it`):
|
|
|
|
```javascript
|
|
describe.only('my new feature', function() {
|
|
/* tests */
|
|
});
|
|
```
|
|
|
|
### Note on Templates
|
|
|
|
The karma runner uses a plugin to precompile the templates for directive tests called [`ngHtml2JsPreprocessor`](https://github.com/karma-runner/karma-ng-html2js-preprocessor) to avoid problems when testing directives in isolation from the rest of the other modules.
|
|
|
|
## Capybara/Cucumber/RSpec E2E Testing
|
|
|
|
The heavy lifting is done via these Testsuites, which are tightly integrated with the Rails stack (and not even part of the `./frontend` folder). Most of them actually test Rails views, but there are a few exceptions: The specs in `./spec/features/work_packages/details` test a good deal of features related to the Work Package Details pane.
|
|
|
|
## A note on plugins & commands used
|
|
|
|
Some of the plugins provide integration tests based on RSpec, Capybara and cucumber. To run the tests of a plugin, the core is required.
|
|
|
|
### Example: `openproject-plugin`
|
|
|
|
Assumptions:
|
|
|
|
- The plugin `openproject-plugins` exists on your local file system, parallel to a clone of `openproject`
|
|
- The plugin contains a `spec` folder and spec that form a suite to testing the plugin
|
|
- The plugin is installed into the Installation of OpenProject located in `openproject`
|
|
|
|
__Note:__ For installing OpenProject plugins, please refer to `./doc/DEVELOP_PLUGINS.md`
|
|
|
|
To run specs for a given plugin:
|
|
|
|
```bash
|
|
$ pwd
|
|
/home/user/code/openproject
|
|
$ rspec ../openproject-plugin/spec
|
|
```
|
|
|
|
Same with cucumber:
|
|
|
|
```bash
|
|
$ pwd
|
|
/home/user/code/openproject
|
|
$ cuke ../openproject-plugin/features
|
|
```
|
|
|
|
__Note:__ `cuke` is a very useful shorthand for:
|
|
|
|
```bash
|
|
function cuke() {
|
|
bundle exec rake cucumber:custom["$1"]
|
|
}
|
|
```
|
|
|
|
There are (in older branches) some legacy tests that might have to be executed,which can be done via:
|
|
|
|
```bash
|
|
$ pwd
|
|
/home/user/code/openproject
|
|
$ rake test:units TEST=../openproject-plugin/test
|
|
```
|
|
|
|
These older legacy tests have been migrated for version `4.1`, but can still popup in some older plugins, or even an old version of OpenProject. the legacy tests have been converted by `@myabc` via gem and are located (for newer versions) here: `./spec/legacy/`. These should be removed in the future an be replaced by either proper specs or even complete features.
|
|
|