From 61ce0ce6d5e0923498edb249073ac183ec0ff48a Mon Sep 17 00:00:00 2001 From: Filipe Silva Date: Fri, 28 Sep 2018 16:59:21 +0100 Subject: [PATCH] fix(@angular-devkit/build-angular): don't rerun tests on unchanged compilation Fix #11880 --- .../build_angular/src/angular-cli-files/plugins/karma.ts | 6 ++++-- .../build_angular/test/karma/rebuilds_spec_large.ts | 8 +++++++- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/packages/angular_devkit/build_angular/src/angular-cli-files/plugins/karma.ts b/packages/angular_devkit/build_angular/src/angular-cli-files/plugins/karma.ts index 1799ce53075e..54de40d22155 100644 --- a/packages/angular_devkit/build_angular/src/angular-cli-files/plugins/karma.ts +++ b/packages/angular_devkit/build_angular/src/angular-cli-files/plugins/karma.ts @@ -174,9 +174,11 @@ const init: any = (config: any, emitter: any, customFileHandlers: any) => { blocked = []; } + let lastCompilationHash: string | undefined; compiler.hooks.done.tap('karma', (stats: any) => { - // Don't refresh karma when there are webpack errors. - if (stats.compilation.errors.length === 0) { + // Refresh karma only when there are no webpack errors, and if the compilation changed. + if (stats.compilation.errors.length === 0 && stats.hash != lastCompilationHash) { + lastCompilationHash = stats.hash; emitter.refreshFiles(); } unblock(); diff --git a/packages/angular_devkit/build_angular/test/karma/rebuilds_spec_large.ts b/packages/angular_devkit/build_angular/test/karma/rebuilds_spec_large.ts index 5f592eac380e..494823bf121a 100644 --- a/packages/angular_devkit/build_angular/test/karma/rebuilds_spec_large.ts +++ b/packages/angular_devkit/build_angular/test/karma/rebuilds_spec_large.ts @@ -13,7 +13,8 @@ import { host, karmaTargetSpec } from '../utils'; // Karma watch mode is currently bugged: // - errors print a huge stack trace -// - karma does not have a way to close the server gracefully. +// - karma does not have a way to close the server +// gracefully (https://github.com/karma-runner/karma/issues/3149) // TODO: fix these before 6.0 final. xdescribe('Karma Builder watch mode', () => { beforeEach(done => host.initialize().toPromise().then(done, done.fail)); @@ -64,4 +65,9 @@ xdescribe('Karma Builder watch mode', () => { take(3), ).toPromise().then(done, done.fail); }, 30000); + + it('does not rebuild when nothing changed', (done) => { + // Start the server in watch mode, wait for the first build to finish, touch + // test.js without changing it, wait 5s then exit unsuscribe, verify only one event was emitted. + }, 30000); });