Skip to content

Commit 0cc8f47

Browse files
author
Tim Nederhoff
committed
removed port and baseUrl. runs testcafe on host as set in devServerTarget host option
1 parent 10e8fca commit 0cc8f47

File tree

6 files changed

+30
-77
lines changed

6 files changed

+30
-77
lines changed

README.md

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,6 @@ $ npm install --save-dev @politie/angular-testcafe-builder
2121
"firefox"
2222
],
2323
"src": ["e2e/*.e2e-spec.ts"],
24-
"host": "localhost",
25-
"port": "4200",
2624
"reporters": [
2725
{
2826
"name": "html",
@@ -56,4 +54,5 @@ $ npm pack
5654
## NOT Implemented (TODO):
5755
* remote browsers
5856
* QR code
59-
* testS
57+
* video
58+
* ssl

demo-app/angular.json

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -112,12 +112,10 @@
112112
"e2e": {
113113
"builder": "@politie/angular-testcafe-builder:testcafe",
114114
"options": {
115-
"devServerTarget": "demo-app:serve:stubbed",
116115
"browsers": [
117116
"chrome --no-sandbox --window-size=1920,1080"
118117
],
119-
"host": "localhost",
120-
"port": 4200,
118+
"screenshotsOnFails": true,
121119
"reporters": [
122120
{
123121
"name": "spec"
@@ -130,13 +128,18 @@
130128
},
131129
"configurations": {
132130
"passing": {
131+
"devServerTarget": "demo-app:serve:stubbed",
133132
"src": ["e2e/passing.e2e-spec.ts"]
134133
},
135134
"failing": {
136-
"src": ["e2e/passing.e2e-spec.ts"]
135+
"devServerTarget": "demo-app:serve:stubbed",
136+
"src": ["e2e/failing.e2e-spec.ts"]
137137
},
138-
"error": {
138+
"error": {"devServerTarget": "demo-app:serve:stubbed",
139139
"src": ["my/invalid/path-to-src"]
140+
},
141+
"externalsite": {
142+
"src": ["e2e/externalsite.e2e-spec.ts"]
140143
}
141144
}
142145
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
import { Selector } from 'testcafe';
2+
3+
fixture('Google search').page('http://www.google.com');
4+
5+
test('google logo', async t => await t.expect(Selector('#hplogo').exists).ok());

src/testcafe/schema.d.ts

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,10 @@
11
export interface TestcafeBuilderOptions {
2-
devServerTarget?: string;
32
src: string | string[];
4-
browsers: string[];
5-
host: string;
6-
port?: number;
7-
baseUrl?: string;
8-
reporters: Reporter[];
9-
live?: boolean;
3+
browsers?: string[]; // default in schema.json
4+
reporters?: Reporter[]; // default in schema.json
5+
devServerTarget?: string; // set to run ng serve
6+
host?: string; // default in schema.json
7+
live?: boolean; // default in schema.json
108
concurrency?: number;
119
screenshotsPath?: string;
1210
screenshotsOnFails?: boolean;
@@ -20,7 +18,7 @@ export interface TestcafeBuilderOptions {
2018
assertionTimeout?: number;
2119
pageLoadTimeout?: number;
2220
speed?: number;
23-
ports?: number[];
21+
ports?: number[]; // testcafe ports
2422
proxy?: string;
2523
proxyBypass?: string[];
2624
disablePageReloads?: boolean;

src/testcafe/schema.json

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -27,17 +27,9 @@
2727
},
2828
"host": {
2929
"type": "string",
30-
"description": "[Angular & TestCafe] Host to use to serve the application and host to run TestCafe on",
30+
"description": "[TestCafe] Host to use to run TestCafe on (only if devServerTarget is not set), default = localhost",
3131
"default": "localhost"
3232
},
33-
"port": {
34-
"type": "number",
35-
"description": "[Angular] The port to use to serve the application."
36-
},
37-
"baseUrl": {
38-
"type": "string",
39-
"description": "Base URL for Testcafe to connect to."
40-
},
4133
"live": {
4234
"type": "boolean",
4335
"description": "Enables live mode. In this mode, TestCafe watches for changes you make in the test files and all files referenced in them (like page objects or helper modules). These changes immediately restart the tests so that you can see the effect.",
@@ -183,9 +175,6 @@
183175
},
184176
"additionalProperties": false,
185177
"required": [
186-
"browsers",
187-
"host",
188-
"port",
189178
"src"
190179
]
191180
}

src/testcafe/testcafe.builder.ts

Lines changed: 8 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -4,20 +4,19 @@ import {
44
createBuilder,
55
targetFromTargetString
66
} from "@angular-devkit/architect";
7-
import { JsonObject, tags } from "@angular-devkit/core";
7+
import { JsonObject } from "@angular-devkit/core";
88
import { TestcafeBuilderOptions } from "./schema";
9-
import * as url from "url";
109
import { isMatch } from "lodash";
1110
const createTestCafe = require("testcafe");
1211

13-
async function runTestcafe(opts: TestcafeBuilderOptions) {
12+
async function runTestcafe(opts: TestcafeBuilderOptions, hostName) {
1413
const port1 = opts.ports && opts.ports[0];
1514
const port2 = opts.ports && opts.ports[1];
1615
const proxy = opts.proxy;
1716
const proxyBypass = opts.proxyBypass;
1817

1918
const testCafe = await createTestCafe(
20-
opts.host,
19+
hostName,
2120
port1,
2221
port2,
2322
opts.ssl,
@@ -67,63 +66,23 @@ async function execute(
6766
options: TestcafeBuilderOptions,
6867
context: BuilderContext
6968
): Promise<BuilderOutput> {
70-
// ensure that only one of these options is used
71-
if (options.devServerTarget && options.baseUrl) {
72-
throw new Error(tags.stripIndents`
73-
The 'baseUrl' option cannot be used with 'devServerTarget'.
74-
`);
75-
}
76-
77-
let baseUrl;
7869
let server;
70+
let serverOptions;
7971
if (options.devServerTarget) {
8072
const target = targetFromTargetString(options.devServerTarget);
81-
const serverOptions = await context.getTargetOptions(target);
82-
83-
const overrides: Record<string, string | number | boolean> = {
84-
watch: false
85-
};
86-
if (options.host !== undefined) {
87-
overrides.host = options.host;
88-
} else if (typeof serverOptions.host === "string") {
89-
options.host = serverOptions.host;
90-
} else {
91-
options.host = overrides.host = "localhost";
92-
}
73+
serverOptions = await context.getTargetOptions(target);
9374

94-
if (options.port !== undefined) {
95-
overrides.port = options.port;
96-
} else if (typeof serverOptions.port === "number") {
97-
options.port = serverOptions.port;
98-
}
99-
100-
server = await context.scheduleTarget(target, overrides);
75+
server = await context.scheduleTarget(target);
10176
const result = await server.result;
10277
if (!result.success) {
10378
console.log('SERVER.RESULT IS NOT SUCCESS!!!');
10479
return { success: false };
10580
}
106-
107-
if (typeof serverOptions.publicHost === "string") {
108-
let publicHost = serverOptions.publicHost as string;
109-
if (!/^\w+:\/\//.test(publicHost)) {
110-
publicHost = `${serverOptions.ssl ? "https" : "http"}://${publicHost}`;
111-
}
112-
const clientUrl = url.parse(publicHost);
113-
baseUrl = url.format(clientUrl);
114-
} else if (typeof result.baseUrl === "string") {
115-
baseUrl = result.baseUrl;
116-
} else if (typeof result.port === "number") {
117-
baseUrl = url.format({
118-
protocol: serverOptions.ssl ? "https" : "http",
119-
hostname: options.host,
120-
port: result.port.toString()
121-
});
122-
}
12381
}
12482

12583
try {
126-
const failedCount = await runTestcafe({ ...options, baseUrl });
84+
const host = serverOptions ? serverOptions.host : options.host;
85+
const failedCount = await runTestcafe(options, host);
12786
if (failedCount > 0) {
12887
return { success: false }
12988
} else {

0 commit comments

Comments
 (0)