📦 create-siesta
A scaffolding utility to help you instantly set up a functional Siesta testing environment.
Usage
npx create-siesta@latest [-f]
or
npm init @coon-js/siesta@latest
and follow the instructions on screen.
caution
This command should be preferably used in an interactive shell so all features are available.
The -f
/--force
-option is optional and can be used to force the installation of package dependencies, even if the tool would skip it otherwise.
This tool can be used with existing or new Sencha Ext JS-projects preferably maintained as NPM packages.
It will create an environment based on Siesta lite with pre-configured files that can be used as test-file templates for an Ext JS application.
caution
Since tests written for Ext JS with Siesta depend on a functional Ext JS installation, this tool will also help with creating builds for the modern- and classic-toolkit of Ext JS. If you decide to install the Ext JS sources with this tool from the Sencha NPM-registry, please make sure you have a working login for this private registry.
Requirements
Node.js version 16.14 or above (check your installed version with node-v
). Multiple Node versions can be managed with nvm.
Installation Steps
The following guides you through the various steps available during the installation.
1. Add default test-installation
- Type:
bool
- default:
false
create-siesta starts with asking you if you want to create a default test-suite. This will add a few default tests to your project and is recommended if you have not created any tests on your own yet. You will be able to reuse the test-suite for your project.
If you are using create-siesta in a project where a test-folder and tests already exists, you most likely read this documentation because you need to build an environment to run these tests. In this case, you can skip this step.
2. Target folder
- Type:
String
- default:
tests
This step is only available if you chose to build a default test-suite.
This step queries the name of the folder where the Siesta tests should be made available.
The folder must be a direct child of the current working directory.
If the folder with the selected name already exists, create-siesta
asks if it is allowed to override the contents. If the question is negated, this installation step will be repeated so a different folder name can be specified.
3. Building the Ext JS SDK
- Type:
bool
If the current environment requires a build of Ext JS, create-siesta
can be advised to take care of the build process for the Sencha Ext JS sources.
3.1 Target folder for the Ext JS SDK
- Type:
String
- default:
.extjs-build
If this previous question is positively confirmed, create-siesta
will prompt for the name of the folder where the build of Ext JS should be made available.
The folder must be a direct child of the current working directory.
If the folder with the selected name already exists, create-siesta
asks if it is allowed to override the contents. If the question is negated, this installation step will be repeated so a different folder name can be specified.
info
If the Ext JS SDK is built with create-siesta
, both the .gitignore
and .npmignore
found in the current working directory will be updated with the name of the folder selected in step 2.1.
If any of these files do not exist, they will be created by create-siesta
.
4. Updating the package.json
- Type:
bool
create-siesta
provides two different ways of installing package-dependencies: --save-dev
or --no-save
with npm i
.
If the environment should be updated with all the information collected and created by create-siesta
, the package.json
will be updated with the following information:
- Installed packages and their versions, made available with
devDependencies
. - entry in
scripts
for starting the local webserver with the Siesta test application in a web browser:npm run test:siesta
info
If no package.json
is available in the current working directory, create-siesta
will create this file.
5. Package Dependencies
- Type:
list
- Options:
local-web-server
siesta-lite
@coon-js/siesta-lib-helper
@sencha/cmd
@sencha/ext
@sencha/ext-ux
@sencha/ext-core
@sencha/ext-classic
@sencha/ext-modern
@sencha/ext-classic-runtime
@sencha/ext-modern-runtime
create-siesta
prompts for the packages that should be installed. If the tool was invoked with a project where packages from this list already exist, those packages will be initially deselected. Missing packages are initially selected.
caution
In order for Siesta to properly work, it is recommended to install all suggested packages from this list, i.e. all packages that are currently missing in the given environment.
info
If all required packages are already installed in the current working directory's node_modules
-folder, this step will not be available until create-siesta
was invoked with the -f
/--force
-option.
5.1 Skip Package Version Selection
- Type:
bool
create-siesta
allows for selecting the required version for each of the packages selected in step 4 with step 4.2. With this option, create-siesta
can automatically decide which version to install.
5.2 Package Version Selection
- Type: list
- Options: various
For each package selected with step 4, create-siesta
allows for selecting the version to install. A list of the latest versions will be presented, and an input field to manually specify the selected version.
info
create-siesta
will automatically select the recommended version for each package.
Finishing the installation
Once create-siesta
finished the installation process, the script npm run test:siesta
will be available for starting the Siesta web application in a web browser. If the user decided to not update the package.json
with teh information collected by create-siesta
, a local web browser can still be invoked without an npm script. The command will be presented on the screen and should default to npx ws --port 8069 --static.index tests.redirect.html --open
.
Toolkit options with the scaffolded tests
create-siesta
utilizes @coon-js/siesta-lib-helper which expands on the functionality of Siesta by providing controls for switching between the toolkits and a combobox with default timeout-values that can be used with the tests written by the user. The controls are available in the lower right corner of the web browser running the Siesta application.
Configuring the test environment
A predefined directory structure for the test cases can be found in <target_dir>/src
respective <target_dir>/[classic/modern]
.
Tests and their corresponding files need to be made available with the file <target_dir>/groups.config.js
.
Loader paths and preloads
The file <target_dir>/tests.config.js
provides configuration options for loader paths and additional files that should be made available for the tests.
{
"name": "[title]",
"timeout": 750,
"loaderPath": {
"modern": {
},
"classic": {
}
},
"preload": {
"css": [],
"js": []
}
}
name
- Type:
String
- default:
[title]
The title of the Siesta application to display with the browser.
timeout
- Type:
integer
- default:
750
The default timeout value tests can use with t.waitForMs
. The value can be queried with t.parent.TIMEOUT
and can be changed dynamically with the control exposed by @coon-js/siesta-lib-helper in the lower right corner of the web browser running the Siesta web application.
loaderPath
- Type:
Object
loaderPath
provides options for specifying additional namespaces and their corresponding source roots in the file system so the tests can resolve additional dependencies. See the Sencha docs for more information on the loader path.
loaderPath
example
{
"loaderPath": {
"Ext.Package": "../node_modules/@coon-js/extjs-package-loader/packages/package-loader/src/Package.js",
"Ext.package": "../node_modules/@coon-js/extjs-package-loader/packages/package-loader/src/package",
"modern": {
"coon.comp.form": "../modern/src/form"
},
"classic": {
"coon.comp.form": "../classic/src/form",
}
}
}
preload
- Type:
Object
Provides options for preloading css- and js-files that need to be available with each test file being loaded.
preload
example
{
"preload": {
"css": [
"./classic/resources/test.css"
],
"js": [
"../node_modules/@l8js/l8/dist/l8.runtime.umd.js"
]
}
}