How to run E2E testing
With any Frontend application, End to End (E2E) testing can really improve maintenance and the Software Development Life Cycle (SDLC) of the application. E2E allows you to quickly verify changes, and also works to document features in your application.
There are a few options for E2E frameworks today. Cypress is the one we chose for building E2E tests in Re:Earth.
Cypress Directory
The directories and files contain different configurations that we'll use to build E2E with Cypress. They all correspond to:
fixtures
is where you build mocks or stubbed responses for your testsintegration
is where you place your actual test.spec.js
files by default.plugins
allow you to extend Cypress behaviorscreenshots
andvideos
are where the test runner will store visual copies of test runs (more on that in the next sections)support
allows you to define "commands" or boil plate behavior you can reference in your tests to avoid the need to repeat startup tasks like login or similar flows
Configuration
There is a cypress.json
configuration file located in your project's folder. This JSON file is used to store any configuration values you supply.
Inside cypress.json
you can find the following lines:
{
"projectId": "",
"baseUrl": "http://localhost:3000",
"testFiles": "**/*.spec.ts"
}
projectId
is a 6 character string (empty in our case) that helps to uniquely identify our project.baseUrl
is used as a prefix forcy.visit()
orcy.request()
command's URL.testFiles
is a String or Array of glob patterns used to ignore test files that would otherwise be shown in your list of tests.
Adding tests
Let's write our first test to see the "local" run of this in action.
Go over to the integrations
folder and create a file first_test.spec.ts
with the following:
describe("First Test", () => {
it("should visit home page", () => {
cy.visit("");
});
});
In this first test, we're just visiting the home page of Re:Earth. Once you've created your first_test.spec.ts
file, go ahead and run yarn cypress:open
to see your test and run it.
For now, Re:Earth provides some additional commands for Cypress:
cy.init()
: Logs in with the E2E account, and then deletes and creates a user for E2E in the back-end to reproduce the same environment in every test.cy.login()
: Logs in with the E2E account and returns an access token.cy.loginAndVisit(url: string, options?: Partial<Cypress.VisitOptions>)
: Log in and then executecy.visit
command.cy.waitForGraphQL()
: Waits for a response from GraphQL.cy.cesiumViewer()
: Returns a Viewer object of Cesium.
Running tests
Inside package.json
we have two main scripts to run Cypress tests.
"scripts": {
"cypress:open": "cypress open",
"cypress:run": "cypress run"
},
yarn cypress:open
opens the test runner by itselfyarn cypress:run
runs the test runner in CI (headless)
For more details please refer to the Cypress official documentation.