public async Task UseSpa_KillsAngularCli_WhenAppIsStopped() { var serviceProvider = GetServiceProvider(s => s.RootPath = "/"); var applicationbuilder = new ApplicationBuilder(serviceProvider); var applicationLifetime = serviceProvider.GetRequiredService<IHostApplicationLifetime>(); var diagnosticListener = serviceProvider.GetRequiredService<DiagnosticListener>(); var listener = new NpmStartedDiagnosticListener(); diagnosticListener.SubscribeWithAdapter(listener); applicationbuilder.UseSpa(b => { b.Options.SourcePath = Directory.GetCurrentDirectory(); b.UseAngularCliServer(GetPlatformSpecificWaitCommand()); }); await Assert_NpmKilled_WhenAppIsStopped(applicationLifetime, listener); }
private async Task Assert_NpmKilled_WhenAppIsStopped(IHostApplicationLifetime applicationLifetime, NpmStartedDiagnosticListener listener) { // Give node a moment to start up await Task.WhenAny(listener.NpmStarted, Task.Delay(TimeSpan.FromSeconds(45))); Process npmProcess = null; var npmExitEvent = new ManualResetEventSlim(); if (listener.NpmStarted.IsCompleted) { npmProcess = listener.NpmStarted.Result.Process; Assert.False(npmProcess.HasExited); npmProcess.Exited += (_, __) => npmExitEvent.Set(); } // Act applicationLifetime.StopApplication(); // Assert AssertNoErrors(); Assert.True(listener.NpmStarted.IsCompleted, "npm wasn't launched"); npmExitEvent.Wait(TimeSpan.FromSeconds(45)); Assert.True(npmProcess.HasExited, "npm wasn't killed"); }