76104f395f
Previously, cli-based docs examples were tested using `yarn e2e ...`. In some cases, it might make sense to run different or additional checks for a docs example (when running `yarn example-e2e` in `aio/`). Currently, the only option is to define a custom project type and overwrite the `e2e` yarn script in `package.json`. Doing so (in addition to being cumbersome and verbose) would also end up in the `.zip` archive that users can download to run the example locally. This would be confusing, if these custom tests are specific to our CI needs. This commit adds support for defining a custom list of commands per example. These commands (if specified) would be run instead of the default `yarn e2e ...`, when testing the docs examples on CI (via `yarn example-e2e`). (This feature will be used to verify that the `service-worker-getting-started` example is set up correctly in a subsequent commit, but can be useful in other cases as well.) PR Close #28020 |
||
---|---|---|
.. | ||
shared | ||
README.md | ||
example-boilerplate.js | ||
example-boilerplate.spec.js | ||
run-example-e2e.js | ||
test.js |
README.md
Overview
Many of the documentation pages contain snippets of code examples. Extract these snippets from
real working example applications, which are stored in subfolders of the /aio/content/examples
folder. Each example can be built and run independently. Each example also provides e2e specs, which
are run as part of our CircleCI legacy build tasks, to verify that the examples continue to work as
expected, as changes are made to the core Angular libraries.
In order to build, run and test these examples independently you need to install dependencies into their sub-folder. Also there are a number of common boilerplate files that are needed to configure each example's project. Maintain these common boilerplate files centrally to reduce the amount of effort if one of them needs to change.
Boilerplate overview
As mentioned, many of the documentation pages contain snippets extracted from real example applications.
To achieve that, all those applications needs to contain a basic boilerplate. E.g. a node_modules
folder, package.json
with scripts, etc.
No one wants to maintain the boilerplate on each example, so the goal of this tool is to provide a set of boilerplates that works in all the examples.
Boilerplate files
Inside /aio/tools/examples/shared/boilerplate
you will find a set of folders representing each
boilerplate.
Currently you will find the next boilerplates:
- CLI - For CLI based examples. This is the default one, to be used in the majority of the examples.
- systemjs - Currently in deprecation, only used in a a few examples.
- i18n - Based on the CLI one, features a few scripts for i18n.
- universal - Based on the cli with a extra server for universal.
There is also a common
folder that contains files used in all different examples.
The example-config.json
Each example is identified by an example-config.json configuration file in its root folder. This configuration file indicates what type of boilerplate this example needs. E.g.
{ projectType: 'universal' }
If the file is empty then the default type of cli is assumed. When the boilerplate tooling runs, it will copy into the example folder all of the appropriate boilerplate files.
A node_modules to share
With all the boilerplate files in place, the only missing piece are the installed packages. For
that you have a /aio/tools/examples/shared/package.json
which contains all the packages
needed to run all the examples through all different boilerplates.
After installing these dependencies, a node_modules
will be created at
/aio/tools/examples/shared/node_modules
. This folder will be symlinked into each example.
So it is not a copy like the other boilerplate files. This solution works in all OSes. Windows
may require admin rights.
End to end tests
End to end changes between boilerplates.
For CLI applications, create a app.e2e-spec.ts
inside the e2e
folder. The tooling will run
ng e2e
for each CLI based examples.
For SystemJS, each example contains an e2e-spec.ts
file. You can find all the related configuration files
in the /aio/tools/examples/shared
folder.
example-boilerplate.js
This script installs all the dependencies that are shared among all the examples, creates the
node_modules
symlinks and copy all the boilerplate files where needed. It won't do anything
about stackblitz nor e2e tests.
It also contains a function to remove all the boilerplate. It uses a git clean -xdf
to do
the job. It will remove all files that don't exist in the git repository, including any
new file that you are working on that hasn't been stage yet. So be sure to save your work
before removing the boilerplate.
run-example-e2e.js
This script will find all the e2e-spec.ts
files and run them.
To not run all tests, you can use the --filter=name
flag to run the example's e2e that contains
that name.
It also has an optional --setup
flag to run the example-boilerplate.js
script and install
the latest webdriver
.
It will create a /aio/protractor-results-txt
file when it finishes running tests.