Skip to content

Commit 4b4cecf

Browse files
committed
test: update tests to work with Jasmine version 4
These changes include fixes to tests, timeout and stop of architect to make tests work with Jasmine 4. One noticeable change that when we didn't stop architect through `run.stop()` this causes Bazel to timeout now. Example ``` -- Test timed out at 2022-03-24 12:07:07 UTC -- /private/var/tmp/_bazel_alanagius/5168427e57f204ca069c602aa7ed1931/sandbox/darwin-sandbox/398/execroot/angular_cli/bazel-out/darwin-fastbuild/bin/packages/angular_devkit/build_angular/build_angular_browser_test.sh.runfiles/angular_cli/packages/angular_devkit/build_angular/build_angular_browser_test.sh: line 424: 41835 Terminated: 15 "${node}" ${LAUNCHER_NODE_OPTIONS[@]+"${LAUNCHER_NODE_OPTIONS[@]}"} ${USER_NODE_OPTIONS[@]+"${USER_NODE_OPTIONS[@]}"} "${MAIN}" ${ARGS[@]+"${ARGS[@]}"} 0<&0 ```
1 parent b50efbb commit 4b4cecf

23 files changed

+174
-204
lines changed

Diff for: lib/bootstrap-local.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,11 @@ const debugBuildTs = debug('ng:local:build:ts');
1616

1717
const child_process = require('child_process');
1818
const fs = require('fs');
19+
const os = require('os');
1920
const path = require('path');
20-
const temp = require('temp');
2121
const ts = require('typescript');
2222

23-
const tmpRoot = temp.mkdirSync('angular-devkit-');
23+
const tmpRoot = fs.mkdtempSync(path.join(fs.realpathSync(os.tmpdir()), 'angular-devkit-'));
2424

2525
debugLocal('starting bootstrap local');
2626

Diff for: package.json

-1
Original file line numberDiff line numberDiff line change
@@ -202,7 +202,6 @@
202202
"stylus-loader": "6.2.0",
203203
"symbol-observable": "4.0.0",
204204
"tar": "^6.1.6",
205-
"temp": "^0.9.0",
206205
"terser": "5.12.1",
207206
"text-table": "0.2.0",
208207
"tree-kill": "1.2.2",

Diff for: packages/angular_devkit/benchmark/BUILD.bazel

-1
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,6 @@ jasmine_node_test(
6363
"@npm//pidtree",
6464
"@npm//pidusage",
6565
"@npm//source-map",
66-
"@npm//temp",
6766
"@npm//tree-kill",
6867
"@npm//yargs-parser",
6968
],

Diff for: packages/angular_devkit/benchmark/src/main_spec.ts

+3-5
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,11 @@
66
* found in the LICENSE file at https://angular.io/license
77
*/
88

9-
import { existsSync, readFileSync, unlinkSync, writeFileSync } from 'fs';
9+
import { existsSync, mkdtempSync, readFileSync, realpathSync, unlinkSync, writeFileSync } from 'fs';
10+
import { tmpdir } from 'os';
1011
import { basename, dirname, join } from 'path';
1112
import { main } from './main';
1213

13-
// eslint-disable-next-line import/no-extraneous-dependencies
14-
const temp = require('temp');
15-
1614
// We only care about the write method in these mocks of NodeJS.WriteStream.
1715
class MockWriteStream {
1816
lines: string[] = [];
@@ -29,7 +27,7 @@ describe('benchmark binary', () => {
2927
const exitCodeOneScript = require.resolve(join(__dirname, './test/exit-code-one.js'));
3028
const benchmarkWatchScript = require.resolve(join(__dirname, './test/watch-test-cmd.js'));
3129
const watchTriggerScript = require.resolve(join(__dirname, './test/watch-test-script.js'));
32-
const outputFileRoot = temp.mkdirSync('benchmark-binary-spec-');
30+
const outputFileRoot = mkdtempSync(join(realpathSync(tmpdir()), 'benchmark-binary-spec-'));
3331
const outputFile = join(outputFileRoot, 'output.log');
3432
let stdout: MockWriteStream, stderr: MockWriteStream;
3533

Diff for: packages/angular_devkit/build_angular/src/builders/browser/specs/build-optimizer_spec.ts

+2-5
Original file line numberDiff line numberDiff line change
@@ -30,11 +30,8 @@ describe('Browser Builder build optimizer', () => {
3030
it('fails if AOT is disabled', async () => {
3131
const overrides = { aot: false, buildOptimizer: true };
3232
const run = await architect.scheduleTarget(targetSpec, overrides);
33-
34-
try {
35-
await run.result;
36-
expect('THE ABOVE LINE SHOULD THROW').toBe('');
37-
} catch {}
33+
await expectAsync(run.result).toBeRejectedWithError();
34+
await run.stop();
3835
});
3936

4037
it('reduces bundle size', async () => {

Diff for: packages/angular_devkit/build_angular/src/builders/browser/specs/cross-origin_spec.ts

+1
Original file line numberDiff line numberDiff line change
@@ -99,5 +99,6 @@ describe('Browser Builder crossOrigin', () => {
9999
const fileName = join(normalize(output.outputPath), 'runtime.js');
100100
const content = virtualFs.fileBufferToString(await host.read(normalize(fileName)).toPromise());
101101
expect(content).toContain('script.crossOrigin = "use-credentials"');
102+
await run.stop();
102103
});
103104
});

Diff for: packages/angular_devkit/build_angular/src/builders/browser/specs/index_spec.ts

+3
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,7 @@ describe('Browser Builder index HTML processing', () => {
156156
`<script src="polyfills.js" type="module"></script>` +
157157
`<script src="vendor.js" type="module"></script><script src="main.js" type="module"></script></body></html>`,
158158
);
159+
await run.stop();
159160
});
160161

161162
it('uses the output value from the index option longform', async () => {
@@ -202,6 +203,7 @@ describe('Browser Builder index HTML processing', () => {
202203
`<script src="polyfills.js" type="module"></script>` +
203204
`<script src="vendor.js" type="module"></script><script src="main.js" type="module"></script></body></html>`,
204205
);
206+
await run.stop();
205207
});
206208

207209
it('creates subdirectories for output value from the index option longform', async () => {
@@ -248,5 +250,6 @@ describe('Browser Builder index HTML processing', () => {
248250
`<script src="polyfills.js" type="module"></script>` +
249251
`<script src="vendor.js" type="module"></script><script src="main.js" type="module"></script></body></html>`,
250252
);
253+
await run.stop();
251254
});
252255
});

Diff for: packages/angular_devkit/build_angular/src/builders/browser/specs/lazy-module_spec.ts

+4-3
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ describe('Browser Builder lazy modules', () => {
6565

6666
const { files } = await browserBuild(architect, host, target, { aot: true });
6767
const data = await files['src_app_lazy_lazy_module_ts.js'];
68-
expect(data).not.toBeUndefined('Lazy module output bundle does not exist');
68+
expect(data).not.toBeUndefined();
6969
expect(data).toContain('LazyModule.ɵmod');
7070
});
7171
});
@@ -85,7 +85,8 @@ describe('Browser Builder lazy modules', () => {
8585
const run = await architect.scheduleTarget(target, {}, { logger });
8686
const output = await run.result;
8787
expect(output.success).toBe(false);
88-
expect(hasMissingModuleError(logs.join())).toBe(true, 'Should show missing module error');
88+
expect(hasMissingModuleError(logs.join())).toBeTrue();
89+
await run.stop();
8990
});
9091

9192
it('should show error when lazy route is invalid on watch mode AOT', async () => {
@@ -98,7 +99,7 @@ describe('Browser Builder lazy modules', () => {
9899
const run = await architect.scheduleTarget(target, overrides);
99100
await run.output
100101
.pipe(
101-
debounceTime(3000),
102+
debounceTime(1500),
102103
tap((buildEvent) => {
103104
buildNumber++;
104105
switch (buildNumber) {

Diff for: packages/angular_devkit/build_angular/src/builders/browser/specs/output-path_spec.ts

+1
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ describe('Browser Builder output path', () => {
6565

6666
expect(await host.exists(join(host.root(), 'dist')).toPromise()).toBe(false);
6767
expect(await host.exists(join(host.root(), 'src-link')).toPromise()).toBe(true);
68+
await run.stop();
6869
});
6970

7071
it('does not allow output path to be project root', async () => {

Diff for: packages/angular_devkit/build_angular/src/builders/browser/specs/poll_spec.ts

+6-2
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,9 @@
77
*/
88

99
import { Architect } from '@angular-devkit/architect';
10-
import { debounceTime, take, tap } from 'rxjs/operators';
10+
import { debounceTime, take, tap, timeout } from 'rxjs/operators';
1111
import { createArchitect, host } from '../../../testing/test-utils';
12+
import { BUILD_TIMEOUT } from '../index';
1213

1314
describe('Browser Builder poll', () => {
1415
const target = { project: 'app', target: 'build' };
@@ -21,13 +22,14 @@ describe('Browser Builder poll', () => {
2122
afterEach(async () => host.restore().toPromise());
2223

2324
it('works', async () => {
24-
const overrides = { watch: true, poll: 10000 };
25+
const overrides = { watch: true, poll: 4000 };
2526
const intervals: number[] = [];
2627
let startTime: number | undefined;
2728

2829
const run = await architect.scheduleTarget(target, overrides);
2930
await run.output
3031
.pipe(
32+
timeout(BUILD_TIMEOUT),
3133
// Debounce 1s, otherwise changes are too close together and polling doesn't work.
3234
debounceTime(1000),
3335
tap((buildEvent) => {
@@ -46,5 +48,7 @@ describe('Browser Builder poll', () => {
4648
const median = intervals[Math.trunc(intervals.length / 2)];
4749
expect(median).toBeGreaterThan(3000);
4850
expect(median).toBeLessThan(12000);
51+
52+
await run.stop();
4953
});
5054
});

Diff for: packages/angular_devkit/build_angular/src/builders/browser/specs/rebuild_spec.ts

+18-2
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,15 @@
88

99
import { Architect } from '@angular-devkit/architect';
1010
import { join, logging, normalize, virtualFs } from '@angular-devkit/core';
11-
import { debounceTime, take, takeWhile, tap } from 'rxjs/operators';
11+
import { debounceTime, take, takeWhile, tap, timeout } from 'rxjs/operators';
1212
import {
1313
createArchitect,
1414
host,
1515
lazyModuleFiles,
1616
lazyModuleFnImport,
1717
outputPath,
1818
} from '../../../testing/test-utils';
19+
import { BUILD_TIMEOUT } from '../index';
1920

2021
describe('Browser Builder rebuilds', () => {
2122
const target = { project: 'app', target: 'build' };
@@ -78,9 +79,10 @@ describe('Browser Builder rebuilds', () => {
7879
const run = await architect.scheduleTarget(target, overrides);
7980
await run.output
8081
.pipe(
82+
timeout(BUILD_TIMEOUT),
8183
debounceTime(rebuildDebounceTime),
8284
tap((result) => {
83-
expect(result.success).toBe(true, 'build should succeed');
85+
expect(result.success).toBeTrue();
8486
const hasLazyChunk = host
8587
.scopedSync()
8688
.exists(normalize('dist/src_app_lazy_lazy_module_ts.js'));
@@ -131,6 +133,7 @@ describe('Browser Builder rebuilds', () => {
131133
const run = await architect.scheduleTarget(target, overrides);
132134
await run.output
133135
.pipe(
136+
timeout(BUILD_TIMEOUT),
134137
debounceTime(rebuildDebounceTime),
135138
tap((buildEvent) => expect(buildEvent.success).toBe(true)),
136139
tap(() => host.appendToFile('src/app/app.component.css', ':host { color: blue; }')),
@@ -164,6 +167,7 @@ describe('Browser Builder rebuilds', () => {
164167
const run = await architect.scheduleTarget(target, overrides, { logger });
165168
await run.output
166169
.pipe(
170+
timeout(BUILD_TIMEOUT),
167171
debounceTime(rebuildDebounceTime),
168172
tap((buildEvent) => {
169173
buildNumber += 1;
@@ -217,12 +221,14 @@ describe('Browser Builder rebuilds', () => {
217221
const run = await architect.scheduleTarget(target, overrides);
218222
await run.output
219223
.pipe(
224+
timeout(BUILD_TIMEOUT),
220225
debounceTime(rebuildDebounceTime),
221226
tap((buildEvent) => expect(buildEvent.success).toBe(true)),
222227
tap(() => host.writeMultipleFiles({ 'src/type.ts': `export type MyType = string;` })),
223228
take(2),
224229
)
225230
.toPromise();
231+
await run.stop();
226232
});
227233

228234
it('rebuilds on transitive type-only file changes', async () => {
@@ -250,6 +256,7 @@ describe('Browser Builder rebuilds', () => {
250256
let buildNumber = 0;
251257
await run.output
252258
.pipe(
259+
timeout(BUILD_TIMEOUT),
253260
debounceTime(rebuildDebounceTime),
254261
tap((buildEvent) => expect(buildEvent.success).toBe(true)),
255262
tap(() => {
@@ -266,6 +273,8 @@ describe('Browser Builder rebuilds', () => {
266273
take(5),
267274
)
268275
.toPromise();
276+
277+
await run.stop();
269278
});
270279

271280
it('rebuilds on transitive non node package DTS file changes', async () => {
@@ -293,6 +302,7 @@ describe('Browser Builder rebuilds', () => {
293302
let buildNumber = 0;
294303
await run.output
295304
.pipe(
305+
timeout(BUILD_TIMEOUT),
296306
debounceTime(rebuildDebounceTime),
297307
tap((buildEvent) => expect(buildEvent.success).toBe(true)),
298308
tap(() => {
@@ -304,6 +314,7 @@ describe('Browser Builder rebuilds', () => {
304314
take(2),
305315
)
306316
.toPromise();
317+
await run.stop();
307318
});
308319

309320
it('rebuilds after errors in JIT', async () => {
@@ -318,6 +329,7 @@ describe('Browser Builder rebuilds', () => {
318329
const run = await architect.scheduleTarget(target, overrides);
319330
await run.output
320331
.pipe(
332+
timeout(BUILD_TIMEOUT),
321333
debounceTime(rebuildDebounceTime),
322334
tap((buildEvent) => {
323335
buildNumber++;
@@ -363,6 +375,7 @@ describe('Browser Builder rebuilds', () => {
363375
const run = await architect.scheduleTarget(target, overrides, { logger });
364376
await run.output
365377
.pipe(
378+
timeout(BUILD_TIMEOUT),
366379
debounceTime(rebuildDebounceTime),
367380
tap((buildEvent) => {
368381
buildNumber += 1;
@@ -461,6 +474,7 @@ describe('Browser Builder rebuilds', () => {
461474
const run = await architect.scheduleTarget(target, overrides);
462475
await run.output
463476
.pipe(
477+
timeout(BUILD_TIMEOUT),
464478
debounceTime(rebuildDebounceTime),
465479
tap((buildEvent) => {
466480
buildNumber += 1;
@@ -551,6 +565,7 @@ describe('Browser Builder rebuilds', () => {
551565
const run = await architect.scheduleTarget(target, overrides);
552566
await run.output
553567
.pipe(
568+
timeout(BUILD_TIMEOUT),
554569
debounceTime(rebuildDebounceTime),
555570
tap((buildEvent) => {
556571
buildNumber += 1;
@@ -615,6 +630,7 @@ describe('Browser Builder rebuilds', () => {
615630
const run = await architect.scheduleTarget(target, overrides);
616631
await run.output
617632
.pipe(
633+
timeout(BUILD_TIMEOUT),
618634
debounceTime(rebuildDebounceTime),
619635
tap(() => {
620636
const content = virtualFs.fileBufferToString(

Diff for: packages/angular_devkit/build_angular/src/builders/browser/specs/replacements_spec.ts

+3-9
Original file line numberDiff line numberDiff line change
@@ -76,10 +76,7 @@ describe('Browser Builder file replacements', () => {
7676
};
7777

7878
const run = await architect.scheduleTarget(target, overrides);
79-
try {
80-
await run.result;
81-
expect('THE ABOVE LINE SHOULD THROW').toBe('');
82-
} catch {}
79+
await expectAsync(run.result).toBeRejectedWithError();
8380
await run.stop();
8481
});
8582

@@ -94,10 +91,7 @@ describe('Browser Builder file replacements', () => {
9491
};
9592

9693
const run = await architect.scheduleTarget(target, overrides);
97-
try {
98-
await run.result;
99-
expect('THE ABOVE LINE SHOULD THROW').toBe('');
100-
} catch {}
94+
await expectAsync(run.result).toBeRejectedWithError();
10195
await run.stop();
10296
});
10397

@@ -214,7 +208,7 @@ describe('Browser Builder file replacements', () => {
214208
.subscribe();
215209

216210
const res = await stop$.toPromise();
217-
expect(res).not.toBe(null, 'Test timed out.');
211+
expect(res).toBeDefined();
218212
expect(res).not.toContain(unexpectedError);
219213
await run.stop();
220214
});

Diff for: packages/angular_devkit/build_angular/src/builders/browser/specs/resolve-json-module_spec.ts

+2
Original file line numberDiff line numberDiff line change
@@ -62,5 +62,7 @@ describe('Browser Builder resolve json module', () => {
6262
take(2),
6363
)
6464
.toPromise();
65+
66+
await run.stop();
6567
});
6668
});

Diff for: packages/angular_devkit/build_angular/src/builders/browser/specs/styles_spec.ts

+2
Original file line numberDiff line numberDiff line change
@@ -513,6 +513,8 @@ describe('Browser Builder styles', () => {
513513

514514
const run2 = await architect.scheduleTarget(target, overrides);
515515
await expectAsync(run2.result).toBeResolvedTo(jasmine.objectContaining({ success: false }));
516+
await run2.stop();
517+
await run.stop();
516518
});
517519

518520
it('supports Protocol-relative Url', async () => {

Diff for: packages/angular_devkit/build_angular/src/builders/dev-server/specs/live-reload_spec.ts

+7-4
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import { Architect, BuilderRun } from '@angular-devkit/architect';
1111
import { tags } from '@angular-devkit/core';
1212
import { createProxyServer } from 'http-proxy';
1313
import puppeteer, { Browser, Page } from 'puppeteer';
14-
import { debounceTime, switchMap, take } from 'rxjs/operators';
14+
import { debounceTime, finalize, switchMap, take } from 'rxjs/operators';
1515
import { createArchitect, host } from '../../../testing/test-utils';
1616

1717
// eslint-disable-next-line @typescript-eslint/no-explicit-any
@@ -131,7 +131,6 @@ describe('Dev Server Builder live-reload', () => {
131131
let browser: Browser;
132132
let page: Page;
133133
let runs: BuilderRun[];
134-
let proxy: ProxyInstance | undefined;
135134

136135
beforeAll(async () => {
137136
browser = await puppeteer.launch({
@@ -164,8 +163,6 @@ describe('Dev Server Builder live-reload', () => {
164163
});
165164

166165
afterEach(async () => {
167-
proxy?.server.close();
168-
proxy = undefined;
169166
await host.restore().toPromise();
170167
await page.close();
171168
await Promise.all(runs.map((r) => r.stop()));
@@ -227,6 +224,9 @@ describe('Dev Server Builder live-reload', () => {
227224
buildCount++;
228225
}),
229226
take(2),
227+
finalize(() => {
228+
proxy?.server.close();
229+
}),
230230
)
231231
.toPromise();
232232
});
@@ -258,6 +258,9 @@ describe('Dev Server Builder live-reload', () => {
258258
buildCount++;
259259
}),
260260
take(2),
261+
finalize(() => {
262+
proxy?.server.close();
263+
}),
261264
)
262265
.toPromise();
263266
});

0 commit comments

Comments
 (0)