Testing
Writing
We use Cypress as the test running framework. It will look for test files within a number of locations, however the standard that the SKAO will employ will be the use of .test.{tsx | jsx} in the same folder as the component being tested. Below is a small illustration as an example.
components └─ App
App.test.tsxApp.tsx
- └─ ReactSkeleton
- ReactSkeleton.test.tsxReactSkeleton.tsx
Note that the ReactSkeleton component is exposed via WebPack 5 ModuleFederationPlugin, so this name should be changed to reflect the application being written ( e.g. SignalDisplay, DataProductDashboard …)
See the SKAO developer guide for more information
Running
To run the interactive test runner, execute
> yarn test
This will also watch the source files and re-run when any changes are detected
To run the tests with coverage, execute
> yarn test:unit:coverage
The coverage results are displayed in the console. They are also written to the coverage folder.
./build/coverage/index.html - open in a web browser to view
To run the ui test runner for unit tests, execute
> yarn test:unit:ui
The coverage results are also available when using this mode.
All the tests should pass before merging the code
End-2-End
To run the ui test runner for e2e tests, execute
> yarn test:e2e:ui
This will launch Cypress in interactive mode for end-to-end tests.
Examples can be found in the PT UI repo, however below should be a guide in how to follow the standard for enw tests. Note: This is for BDD Cucumber style cypress testing.
- In the cypress/e2e directory
Create a feature file for example {createProposal.feature}
Create a new directory within cypress/e2e named the EXACT same as the feature file created.
Within the new directory for example {createProposal} create a new step definition file for example
{createProposal.js}
The feature file should follow the format as below
Feature: Creating proposals
Scenario: Create a basic proposal Given I am a PHT user who wants to create a proposal When I provide a title and select the proposal category Then a proposal with unique ID is created and I can see that on the landing page
The step definition file should follow the format as below. It is important to note that the text within the Given/When/Then steps MUST match the statements from the feature file. This example showcases imported methods from a common class, which is recommended to prevent duplication.
import { Given, When, Then } from ‘cypress-cucumber-preprocessor/steps’; import {
clickAddProposal, clickCreateProposal, clickHome, clickSaveProposal, clickStandardProposalSubTypeTargetOfOpportunity, verifyProposalOnLandingPage
} from ‘../../common/common’;
- Given(‘I am a PHT user who wants to create a proposal’, () => {
clickAddProposal()
});
- When(‘I provide a title and select the proposal category’, () => {
clickStandardProposalSubTypeTargetOfOpportunity() clickCreateProposal()
});
- Then(‘a proposal with unique ID is created and I can see that on the landing page’, () => {
clickSaveProposal() clickHome() verifyProposalOnLandingPage()
});
Code Analysis
[ESLint](https://ESLint.org/) and [Prettier](https://prettier.io/) are included as code analysis and formatting tools. These do not need installing as they’re included in node_modules by running yarn init.
These tools can be run in the command line or integrated into your IDE (recommended).
JavaScript based SKA projects must comply with the [AirBnB JavaScript Style Guide](https://github.com/airbnb/javascript). These rules are included in this project and ESLint and Prettier are configured to use them.
Running
To run the analysis tools, execute
> yarn code-analysis
This will display any errors in the command line. If there are any errors, YARN will exit with a non-zero code, the -s argument suppresses this and cleans up the output.
Alternatively, you can also run
> yarn checker
This will display any errors in the command line and fix linting issues by running yarn prettier:fix && yarn lint:fix.