示例#1
0
        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);
        }
示例#2
0
        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");
        }