Add jest and puppeteer for testing

This commit is contained in:
Peter Maquiran
2021-07-10 08:45:51 +01:00
parent 85a6d175dc
commit 451cfaa229
15 changed files with 7372 additions and 44 deletions
+13
View File
@@ -0,0 +1,13 @@
# editorconfig.org
root = true
[*]
indent_style = space
indent_size = 2
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true
[*.md]
trim_trailing_whitespace = false
View File
+13
View File
@@ -0,0 +1,13 @@
// jest-puppeteer.config.js
module.exports = {
server: {
command: 'http-server ./www',
port: 8080,
launchTimeout: 5000
},
launch: {
dumpio: true,
headless: false,
},
}
+15
View File
@@ -0,0 +1,15 @@
module.exports = {
"roots": [
"<rootDir>/test"
],
"testMatch": [
"**/__tests__/**/*.+(ts|tsx|js)",
"**/?(*.)+(spec|test).+(ts|tsx|js)"
],
"transform": {
"^.+\\.(ts|tsx)$": "ts-jest"
},
// "globalSetup": "<rootDir>/test/setupJest.ts",
preset: 'jest-puppeteer',
// setupFilesAfterEnv: "<rootDir>/test/setupJest.ts",
}
+7146 -36
View File
File diff suppressed because it is too large Load Diff
+14 -1
View File
@@ -9,7 +9,9 @@
"build": "ng build",
"test": "ng test",
"lint": "ng lint",
"e2e": "ng e2e"
"e2e": "ng e2e",
"nice": "node server.js",
"jest": "jest --runInBand"
},
"private": true,
"dependencies": {
@@ -52,6 +54,8 @@
"@logisticinfotech/ionic4-datepicker": "^1.4.4",
"@ng-bootstrap/ng-bootstrap": "^9.1.2",
"@ngx-translate/core": "^13.0.0",
"@types/jest-environment-puppeteer": "^4.4.1",
"@types/puppeteer": "^5.4.4",
"angular-calendar": "^0.28.22",
"angular-tag-cloud-module": "^5.2.2",
"bootstrap": "^4.5.0",
@@ -65,19 +69,24 @@
"crypto-js": "^4.0.0",
"date-fns": "^2.17.0",
"depd": "^2.0.0",
"global": "^4.4.0",
"http-server": "^0.12.3",
"ibm-mfp-web-push": "^8.0.2020052213",
"ibm-mfp-web-sdk": "^8.0.2021021706",
"ionic-angular": "^3.9.10",
"ionic-selectable": "^4.7.1",
"ionic2-alpha-scroll": "^2.0.1",
"ionic2-calendar": "^0.6.6",
"jest-puppeteer": "^5.0.4",
"jetifier": "^1.6.6",
"moment": "^2.29.1",
"ngx-socket-io": "^3.2.0",
"puppeteer": "^10.1.0",
"rxjs": "~6.6.3",
"rxjs-compat": "^6.6.7",
"sharp": "^0.25.4",
"socket.io-client": "^2.3.0",
"ts-jest": "^27.0.3",
"tslib": "^2.0.0",
"uuidv4": "^6.2.11",
"wordcloud": "^1.1.2",
@@ -94,6 +103,7 @@
"@ionic/lab": "3.1.7",
"@types/jasmine": "~3.6.0",
"@types/jasminewd2": "~2.0.3",
"@types/jest": "^26.0.24",
"@types/node": "^12.11.1",
"codelyzer": "^6.0.0",
"cordova-android": "^9.1.0",
@@ -117,12 +127,15 @@
"cordova-plugin-whitelist": "^1.3.4",
"jasmine-core": "~3.6.0",
"jasmine-spec-reporter": "~5.0.0",
"jest": "^27.0.6",
"jest-preset-angular": "^9.0.4",
"karma": "~5.0.0",
"karma-chrome-launcher": "~3.1.0",
"karma-coverage-istanbul-reporter": "~3.0.2",
"karma-jasmine": "~4.0.0",
"karma-jasmine-html-reporter": "^1.5.0",
"protractor": "~7.0.0",
"ts-jest-puppeteer": "0.0.5",
"ts-node": "~8.3.0",
"tslint": "~6.1.0",
"typescript": "^4.1.5"
+42
View File
@@ -0,0 +1,42 @@
# Gabinete Digital
## Requirements
[node >= 14](https://nodejs.org/dist/v14.17.3/node-v14.17.3-x64.msi)
## Installation
Use the package manager npm to install dependencies.
```bash
npm ci
npm install
npm install -g @ionic/cli
npm install -g http-server
```
## Start the development server
```bash
ionic serve
```
## build for production and launch server
```bash
ionic serve build --prod
npm run start
```
## Run test
```bash
npm run jest
```
## Contributing
For major changes, please open an issue first to discuss what you would like to change.
Please make sure to update tests as appropriate.
@@ -21,7 +21,7 @@
</div>
<div class="aside overflow-y-auto d-flex flex-wrap width-100">
<div (click)="openEventsToApprovePage('MDGPR');selectedElement='approval'" [class.active]="selectedElement == 'approval'" class="exp-card d-flex flex-column" *ngIf="loggeduser.Profile == 'MDGPR'" >
<div (click)="openEventsToApprovePage();selectedElement='approval'" [class.active]="selectedElement == 'approval'" class="exp-card d-flex flex-column" *ngIf="loggeduser.Profile == 'MDGPR'" >
<div class="d-flex justify-center">
<ion-icon src="assets/images/icons-agenda.svg"></ion-icon>
</div>
@@ -10,8 +10,6 @@ import { PedidosPage } from './pedidos/pedidos.page';
/* import { PendentesPage } from './pendentes/pendentes.page'; */
import { AuthService } from 'src/app/services/auth.service';
import { User } from 'src/app/models/user.model';
import { DespachosPrPage } from 'src/app/pages/gabinete-digital/despachos-pr/despachos-pr.page'
import { DiplomasPage } from 'src/app/shared/gabinete-digital/diplomas/diplomas.page';
import { ExpedientsPage } from 'src/app/shared/gabinete-digital/expedients/expedients.page';
import { PendentesPage } from 'src/app/shared/gabinete-digital/pendentes/pendentes.page';
import { EventsToApprovePage } from 'src/app/shared/gabinete-digital/events-to-approve/events-to-approve.page';
+1 -1
View File
@@ -75,7 +75,7 @@
Entrar com senha
</div>
<div class="voltar d-flex align-center justify-center pt-25 clear" (click)="clearCode()">
<div id="clear" class="cy-clear voltar d-flex align-center justify-center pt-25 clear" (click)="clearCode()">
Limpar
</div>
+94
View File
@@ -0,0 +1,94 @@
import { promise } from 'protractor';
import { environment } from './../src/environments/environment'
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
describe('Puppeteer tests', () => {
beforeAll(async () => {
// await page.goto('http://127.0.0.1:8080')
})
test('[table] login', async () => {
// const browser = await puppeteer.launch({headless: false});
await page.setViewport({width: 1200, height: 720});
await page.goto('http://127.0.0.1:8080'); // wait until page load
await page.waitForSelector('.btn-ok')
await page.evaluate( () => {
let a: HTMLInputElement = document.querySelector('input[type="text"]')
a.value = ''
let b: HTMLInputElement = document.querySelector('input[type="password"')
b.value = ''
})
await page.type('input[type="text"]', environment.defaultuser);
await page.type('input[type="password"]', environment.defaultuserpwd);
// click and wait for navigation
await Promise.all([
page.click('.btn-ok'),
// page.waitForNavigation({ waitUntil: 'networkidle0' }),
]);
await page.waitForSelector('.circle')
expect(3 + 2).toBe(5);
},30000);
test('[table] Clear Code button and set pin', async () => {
// const browser = await puppeteer.launch({headless: false});
await page.setViewport({width: 1200, height: 720});
await page.goto('http://127.0.0.1:8080'); // wait until page load
await page.waitForSelector('.btn-ok')
await page.evaluate( () => {
let a: HTMLInputElement = document.querySelector('input[type="text"]')
a.value = ''
let b: HTMLInputElement = document.querySelector('input[type="password"')
b.value = ''
})
await page.type('input[type="text"]', environment.defaultuser);
await page.type('input[type="password"]', environment.defaultuserpwd);
// click and wait for navigation
await Promise.all([
page.click('.btn-ok'),
// page.waitForNavigation({ waitUntil: 'networkidle0' }),
]);
await page.waitForSelector('.circle')
// define code
await page.click('.circle')
await page.click('.circle')
await page.click('.circle')
// clear code
await page.click('.cy-clear')
// define code
await page.click('.circle')
await page.click('.circle')
await page.click('.circle')
await page.click('.circle')
await page.click('.div-profile')
expect(3 + 2).toBe(5);
},30000);
});
+18
View File
@@ -0,0 +1,18 @@
import { element } from 'protractor';
import { environment } from './../src/environments/environment'
describe('Puppeteer tests', () => {
beforeAll(async () => {
// await page.goto('http://127.0.0.1:8080')
})
test('login', async () => {
expect(3 + 2).toBe(5);
}, 30000);
});
+7
View File
@@ -0,0 +1,7 @@
const ts_preset = require('ts-jest/presets/js-with-babel/jest-preset')
const puppeteer_preset = require('jest-puppeteer/jest-preset')
require('expect-puppeteer')
module.exports = async () => {
};
+2 -1
View File
@@ -19,5 +19,6 @@
"angularCompilerOptions": {
"fullTemplateTypeCheck": true,
"strictInjectionParameters": true
}
},
"esModuleInterop": true
}
+6 -2
View File
@@ -4,7 +4,10 @@
"outDir": "./out-tsc/spec",
"types": [
"jasmine",
"node"
"node",
"jest",
"puppeteer",
"jest-environment-puppeteer",
]
},
"files": [
@@ -14,5 +17,6 @@
"include": [
"src/**/*.spec.ts",
"src/**/*.d.ts"
]
],
"esModuleInterop": true
}