Skip to content

Commit

Permalink
Initialised Playwright for E2E tests plus updated README with details…
Browse files Browse the repository at this point in the history
… on Playwright
  • Loading branch information
DanielClarkeEducation committed Dec 2, 2024
1 parent eaae6af commit cd23035
Show file tree
Hide file tree
Showing 5 changed files with 227 additions and 0 deletions.
19 changes: 19 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -61,3 +61,22 @@ dotnet test --collect:"XPlat Code Coverage" --settings coverlet.runsettings
```

This will pull in the exclusions such as the .cshtml files and will replicate coverage in the GitHub Actions.

## End to end/Smoke testing

End to end tests are ran using [Playwright](https://playwright.dev/).

To run the tests, run the following commands:
- Run the local web app.
- Navigate to the correct folder, be it:
- ``cd tests/Dfe.EarlyYearsQualification.E2ETests/playwright`` for the E2E tests.
- ``cd tests/Dfe.EarlyYearsQualification.SmokeTests/playwright`` for the smoke tests.
- Tell Node Version Manager that you want the latest version with: ``nvm use node --lts``
- Run the tests with: ``npx playwright test``

### Problems with Safari?
If you notice you are having issues with running Safari tests locally and them failing then there is a fix.

This is happening due to because Safari strictly enforcing the `upgrade-insecure-requests` header. This is converting the HTTP requests to HTTPS.

To fix this, comment out this line in the web app's [Program.cs](https://github.com/DFE-Digital/check-an-early-years-qualification/blob/main/src/Dfe.EarlyYearsQualification.Web/Program.cs#L138-L140). This will remove the header from all requests and should let Safari use HTTP.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

14 changes: 14 additions & 0 deletions tests/Dfe.EarlyYearsQualification.E2ETests/playwright/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
{
"name": "playwright",
"version": "1.0.0",
"main": "index.js",
"scripts": {},
"keywords": [],
"author": "",
"license": "ISC",
"description": "",
"devDependencies": {
"@playwright/test": "^1.49.0",
"@types/node": "^22.10.1"
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
import { defineConfig, devices } from '@playwright/test';

/**
* Read environment variables from file.
* https://github.com/motdotla/dotenv
*/
// import dotenv from 'dotenv';
// import path from 'path';
// dotenv.config({ path: path.resolve(__dirname, '.env') });

/**
* See https://playwright.dev/docs/test-configuration.
*/
export default defineConfig({
testDir: './tests',
/* Run tests in files in parallel */
fullyParallel: true,
/* Fail the build on CI if you accidentally left test.only in the source code. */
forbidOnly: !!process.env.CI,
/* Retry on CI only */
retries: process.env.CI ? 2 : 0,
/* Opt out of parallel tests on CI. */
workers: process.env.CI ? 1 : undefined,
/* Reporter to use. See https://playwright.dev/docs/test-reporters */
reporter: 'html',
/* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */
use: {
/* Base URL to use in actions like `await page.goto('/')`. */
// baseURL: 'http://127.0.0.1:3000',

/* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */
trace: 'on-first-retry',
},

/* Configure projects for major browsers */
projects: [
{
name: 'chromium',
use: { ...devices['Desktop Chrome'] },
},

{
name: 'firefox',
use: { ...devices['Desktop Firefox'] },
},

{
name: 'webkit',
use: { ...devices['Desktop Safari'] },
},

/* Test against mobile viewports. */
// {
// name: 'Mobile Chrome',
// use: { ...devices['Pixel 5'] },
// },
// {
// name: 'Mobile Safari',
// use: { ...devices['iPhone 12'] },
// },

/* Test against branded browsers. */
// {
// name: 'Microsoft Edge',
// use: { ...devices['Desktop Edge'], channel: 'msedge' },
// },
// {
// name: 'Google Chrome',
// use: { ...devices['Desktop Chrome'], channel: 'chrome' },
// },
],

/* Run your local dev server before starting the tests */
// webServer: {
// command: 'npm run start',
// url: 'http://127.0.0.1:3000',
// reuseExistingServer: !process.env.CI,
// },
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
import { test, expect } from '@playwright/test';

test('has title', async ({ page }) => {
await page.goto('https://playwright.dev/');

// Expect a title "to contain" a substring.
await expect(page).toHaveTitle(/Playwright/);
});

test('get started link', async ({ page }) => {
await page.goto('https://playwright.dev/');

// Click the get started link.
await page.getByRole('link', { name: 'Get started' }).click();

// Expects page to have a heading with the name of Installation.
await expect(page.getByRole('heading', { name: 'Installation' })).toBeVisible();
});

0 comments on commit cd23035

Please sign in to comment.