- Working on e2e tests for angular

This commit is contained in:
Ferdi Koomen 2022-01-25 20:43:12 +01:00
parent 1d8dc54d94
commit 09e6c5f4cc
21 changed files with 226 additions and 30 deletions

View File

@ -15,21 +15,23 @@ const config: Config.InitialOptions = {
displayName: 'E2E',
testEnvironment: 'node',
testMatch: [
'<rootDir>/test/e2e/v2.fetch.spec.ts',
'<rootDir>/test/e2e/v2.xhr.spec.ts',
'<rootDir>/test/e2e/v2.node.spec.ts',
'<rootDir>/test/e2e/v2.axios.spec.ts',
'<rootDir>/test/e2e/v2.babel.spec.ts',
'<rootDir>/test/e2e/v3.fetch.spec.ts',
'<rootDir>/test/e2e/v3.xhr.spec.ts',
'<rootDir>/test/e2e/v3.node.spec.ts',
'<rootDir>/test/e2e/v3.axios.spec.ts',
'<rootDir>/test/e2e/v3.babel.spec.ts',
'<rootDir>/test/e2e/client.fetch.spec.ts',
'<rootDir>/test/e2e/client.xhr.spec.ts',
'<rootDir>/test/e2e/client.node.spec.ts',
'<rootDir>/test/e2e/client.axios.spec.ts',
'<rootDir>/test/e2e/client.babel.spec.ts',
// '<rootDir>/test/e2e/v2.fetch.spec.ts',
// '<rootDir>/test/e2e/v2.xhr.spec.ts',
// '<rootDir>/test/e2e/v2.node.spec.ts',
// '<rootDir>/test/e2e/v2.axios.spec.ts',
// '<rootDir>/test/e2e/v2.babel.spec.ts',
'<rootDir>/test/e2e/v2.angular.spec.ts',
// '<rootDir>/test/e2e/v3.fetch.spec.ts',
// '<rootDir>/test/e2e/v3.xhr.spec.ts',
// '<rootDir>/test/e2e/v3.node.spec.ts',
// '<rootDir>/test/e2e/v3.axios.spec.ts',
// '<rootDir>/test/e2e/v3.babel.spec.ts',
'<rootDir>/test/e2e/v3.angular.spec.ts',
// '<rootDir>/test/e2e/client.fetch.spec.ts',
// '<rootDir>/test/e2e/client.xhr.spec.ts',
// '<rootDir>/test/e2e/client.node.spec.ts',
// '<rootDir>/test/e2e/client.axios.spec.ts',
// '<rootDir>/test/e2e/client.babel.spec.ts',
],
},
],

View File

@ -65,8 +65,10 @@
},
"devDependencies": {
"@angular/common": "13.1.3",
"@angular/compiler": "13.1.3",
"@angular/core": "13.1.3",
"@angular/platform-browser": "13.1.3",
"@angular/platform-browser-dynamic": "13.1.3",
"@babel/cli": "7.16.8",
"@babel/core": "7.16.12",
"@babel/preset-env": "7.16.11",

View File

@ -1,6 +1,7 @@
{{>header}}
import { HttpClient, HttpHeaders, HttpResponse } from '@angular/common/http';
import { HttpClient, HttpHeaders } from '@angular/common/http';
import type { HttpResponse } from '@angular/common/http';
import { Observable } from 'rxjs';
import { ApiError } from './ApiError';

View File

@ -0,0 +1,52 @@
import { HttpClientModule } from '@angular/common/http';
import { Component, NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
import { CollectionFormatService } from './services/CollectionFormatService';
import { ComplexService } from './services/ComplexService';
import { DefaultService } from './services/DefaultService';
import { DefaultsService } from './services/DefaultsService';
import { DuplicateService } from './services/DuplicateService';
import { ErrorService } from './services/ErrorService';
import { HeaderService } from './services/HeaderService';
import { MultipleTags1Service } from './services/MultipleTags1Service';
import { MultipleTags2Service } from './services/MultipleTags2Service';
import { MultipleTags3Service } from './services/MultipleTags3Service';
import { NoContentService } from './services/NoContentService';
import { ParametersService } from './services/ParametersService';
import { ResponseService } from './services/ResponseService';
import { SimpleService } from './services/SimpleService';
import { TypesService } from './services/TypesService';
@Component({
selector: 'app-root',
templateUrl: `<div>Angular</div>`,
})
export class AppComponent {}
@NgModule({
imports: [BrowserModule, HttpClientModule],
providers: [
CollectionFormatService,
ComplexService,
DefaultService,
DefaultsService,
DuplicateService,
ErrorService,
HeaderService,
MultipleTags1Service,
MultipleTags2Service,
MultipleTags3Service,
NoContentService,
ParametersService,
ResponseService,
SimpleService,
TypesService,
],
declarations: [AppComponent],
bootstrap: [AppComponent],
})
export class AppModule {}
platformBrowserDynamic().bootstrapModule(AppModule);

View File

@ -0,0 +1,58 @@
import { HttpClientModule } from '@angular/common/http';
import { Component, NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
import { CollectionFormatService } from './services/CollectionFormatService';
import { ComplexService } from './services/ComplexService';
import { DefaultService } from './services/DefaultService';
import { DefaultsService } from './services/DefaultsService';
import { DuplicateService } from './services/DuplicateService';
import { ErrorService } from './services/ErrorService';
import { FormDataService } from './services/FormDataService';
import { HeaderService } from './services/HeaderService';
import { MultipartService } from './services/MultipartService';
import { MultipleTags1Service } from './services/MultipleTags1Service';
import { MultipleTags2Service } from './services/MultipleTags2Service';
import { MultipleTags3Service } from './services/MultipleTags3Service';
import { NoContentService } from './services/NoContentService';
import { ParametersService } from './services/ParametersService';
import { RequestBodyService } from './services/RequestBodyService';
import { ResponseService } from './services/ResponseService';
import { SimpleService } from './services/SimpleService';
import { TypesService } from './services/TypesService';
import { UploadService } from './services/UploadService';
@Component({
selector: 'app-root',
templateUrl: `<div>Angular</div>`,
})
export class AppComponent {}
@NgModule({
imports: [BrowserModule, HttpClientModule],
providers: [
CollectionFormatService,
ComplexService,
DefaultService,
DefaultsService,
DuplicateService,
ErrorService,
FormDataService,
HeaderService,
MultipartService,
MultipleTags1Service,
MultipleTags2Service,
MultipleTags3Service,
NoContentService,
ParametersService,
RequestBodyService,
ResponseService,
SimpleService,
TypesService,
UploadService,
],
})
export class AppModule {}
platformBrowserDynamic().bootstrapModule(AppModule);

View File

@ -7,7 +7,7 @@ import server from './scripts/server';
describe('v3.babel', () => {
beforeAll(async () => {
await generate('client/babel', 'v3', 'fetch', true, true, 'AppClient');
await copy('client/babel');
await copy('script.js', 'client/babel/script.js');
compileWithBabel('client/babel');
await server.start('client/babel');
await browser.start();

View File

@ -7,7 +7,7 @@ import server from './scripts/server';
describe('v3.fetch', () => {
beforeAll(async () => {
await generate('client/fetch', 'v3', 'fetch', false, false, 'AppClient');
await copy('client/fetch');
await copy('script.js', 'client/fetch/script.js');
compileWithTypescript('client/fetch');
await server.start('client/fetch');
await browser.start();

View File

@ -7,7 +7,7 @@ import server from './scripts/server';
describe('v3.xhr', () => {
beforeAll(async () => {
await generate('client/xhr', 'v3', 'xhr', false, false, 'AppClient');
await copy('client/xhr');
await copy('script.js', 'client/xhr/script.js');
compileWithTypescript('client/xhr');
await server.start('client/xhr');
await browser.start();

View File

@ -27,8 +27,9 @@ export const compileWithTypescript = (dir: string) => {
strict: true,
skipLibCheck: true,
allowSyntheticDefaultImports: true,
experimentalDecorators: true,
},
include: ['./index.ts'],
include: ['./index.ts', './main.ts'],
};
// Compile files to JavaScript (ES6 modules)

View File

@ -1,5 +1,5 @@
import { copyFileSync } from 'fs';
export const copy = (dir: string) => {
copyFileSync('./test/e2e/assets/script.js', `./test/e2e/generated/${dir}/script.js`);
export const copy = (fileNameIn: string, fileNameOut: string) => {
copyFileSync(`./test/e2e/assets/${fileNameIn}`, `./test/e2e/generated/${fileNameOut}`);
};

View File

@ -3,7 +3,7 @@ import { generate as __generate } from '../../../';
export const generate = async (
dir: string,
version: string,
client: 'fetch' | 'xhr' | 'node' | 'axios',
client: 'fetch' | 'xhr' | 'node' | 'axios' | 'angular',
useOptions: boolean = false,
useUnionTypes: boolean = false,
clientName?: string

View File

@ -1,5 +1,6 @@
import express, { Express } from 'express';
import { Server } from 'http';
import { EOL } from 'os';
let _app: Express;
let _server: Server;
@ -23,7 +24,22 @@ const start = async (dir: string) => {
// This file is copied from test/e2e/assets/script.js to the output directory
// of the specific version and client.
_app.get('/', (req, res) => {
res.send('<script src="js/script.js"></script>');
res.send(
[
'<!DOCTYPE html>',
'<html>',
'<head>',
'<meta charset="utf-8">',
'<title>Test</title>',
'</head>',
'<body>',
'<app-root></app-root>',
'<script src="js/main.js"></script>',
'<script src="js/script.js"></script>',
'</body>',
'</html>',
].join(EOL)
);
});
// Register an 'echo' server for testing error codes. This will just grab the

View File

@ -0,0 +1,25 @@
import browser from './scripts/browser';
import { compileWithTypescript } from './scripts/compileWithTypescript';
import { copy } from './scripts/copy';
import { generate } from './scripts/generate';
import server from './scripts/server';
describe('v2.angular', () => {
beforeAll(async () => {
await generate('v2/angular', 'v2', 'angular');
await copy('script.js', 'v2/angular/script.js');
await copy('angular-openapi-v2.ts', 'v2/angular/main.ts');
compileWithTypescript('v2/angular');
await server.start('v2/angular');
await browser.start();
}, 30000);
afterAll(async () => {
await browser.stop();
await server.stop();
});
it('requests token', async () => {
expect(true).toBe(true);
});
});

View File

@ -7,7 +7,7 @@ import server from './scripts/server';
describe('v2.babel', () => {
beforeAll(async () => {
await generate('v2/babel', 'v2', 'fetch', true, true);
await copy('v2/babel');
await copy('script.js', 'v2/babel/script.js');
compileWithBabel('v2/babel');
await server.start('v2/babel');
await browser.start();

View File

@ -7,7 +7,7 @@ import server from './scripts/server';
describe('v2.fetch', () => {
beforeAll(async () => {
await generate('v2/fetch', 'v2', 'fetch');
await copy('v2/fetch');
await copy('script.js', 'v2/fetch/script.js');
compileWithTypescript('v2/fetch');
await server.start('v2/fetch');
await browser.start();

View File

@ -7,7 +7,7 @@ import server from './scripts/server';
describe('v2.xhr', () => {
beforeAll(async () => {
await generate('v2/xhr', 'v2', 'xhr');
await copy('v2/xhr');
await copy('script.js', 'v2/xhr/script.js');
compileWithTypescript('v2/xhr');
await server.start('v2/xhr');
await browser.start();

View File

@ -0,0 +1,25 @@
import browser from './scripts/browser';
import { compileWithTypescript } from './scripts/compileWithTypescript';
import { copy } from './scripts/copy';
import { generate } from './scripts/generate';
import server from './scripts/server';
describe('v3.angular', () => {
beforeAll(async () => {
await generate('v3/angular', 'v3', 'angular');
await copy('script.js', 'v3/angular/script.js');
await copy('angular-openapi-v3.ts', 'v3/angular/main.ts');
compileWithTypescript('v3/angular');
await server.start('v3/angular');
await browser.start();
}, 30000);
afterAll(async () => {
await browser.stop();
await server.stop();
});
it('requests token', async () => {
expect(true).toBe(true);
});
});

View File

@ -7,7 +7,7 @@ import server from './scripts/server';
describe('v3.babel', () => {
beforeAll(async () => {
await generate('v3/babel', 'v3', 'fetch', true, true);
await copy('v3/babel');
await copy('script.js', 'v3/babel/script.js');
compileWithBabel('v3/babel');
await server.start('v3/babel');
await browser.start();

View File

@ -7,7 +7,7 @@ import server from './scripts/server';
describe('v3.fetch', () => {
beforeAll(async () => {
await generate('v3/fetch', 'v3', 'fetch');
await copy('v3/fetch');
await copy('script.js', 'v3/fetch/script.js');
compileWithTypescript('v3/fetch');
await server.start('v3/fetch');
await browser.start();

View File

@ -7,7 +7,7 @@ import server from './scripts/server';
describe('v3.xhr', () => {
beforeAll(async () => {
await generate('v3/xhr', 'v3', 'xhr');
await copy('v3/xhr');
await copy('script.js', 'v3/xhr/script.js');
compileWithTypescript('v3/xhr');
await server.start('v3/xhr');
await browser.start();

View File

@ -9,6 +9,13 @@
dependencies:
tslib "^2.3.0"
"@angular/compiler@13.1.3":
version "13.1.3"
resolved "https://registry.yarnpkg.com/@angular/compiler/-/compiler-13.1.3.tgz#fc33b06046599ecc943f55049e0a121d5ab46d4f"
integrity sha512-dbHs/Oa+Dn+7i0jKtlVDE0lD0DaUC+lVzAcTK/zS37LrckrTMn1CA+z9bZ4gpHig9RU0wgV3YORxv0wokyiB8A==
dependencies:
tslib "^2.3.0"
"@angular/core@13.1.3":
version "13.1.3"
resolved "https://registry.yarnpkg.com/@angular/core/-/core-13.1.3.tgz#4afd71f674f9ead1aada81315f84846cdba10fa4"
@ -16,6 +23,13 @@
dependencies:
tslib "^2.3.0"
"@angular/platform-browser-dynamic@13.1.3":
version "13.1.3"
resolved "https://registry.yarnpkg.com/@angular/platform-browser-dynamic/-/platform-browser-dynamic-13.1.3.tgz#08cbe321e5f39636a08eb77606ff496df478a21e"
integrity sha512-vEWyJ+2gkwh2N6KOJfxUNSdSO51ROlzCqqzCfHrPYQrlOFUfKsYKA1uoiB5UGfFEU0HBtIRWn6xoUy3wzVOZbw==
dependencies:
tslib "^2.3.0"
"@angular/platform-browser@13.1.3":
version "13.1.3"
resolved "https://registry.yarnpkg.com/@angular/platform-browser/-/platform-browser-13.1.3.tgz#69d90b10e89e11f14f5798d1b6fd788255a6114e"