示例#1
0
        public DevServerTestContext()
        {
            var builder = new WebHostBuilder()
                          .UseContentRoot(WebSite.GetContentRoot())
                          .ConfigureServices(services =>
            {
                services.AddMvc();

                services.AddWebpack().AddDevServerOptions(opts =>
                {
                    opts.PublicPath       = publicPath;
                    opts.Port             = 8081;
                    opts.ManifestFileName = "webpack-assets.json";
                });

                services.AddSingleton <IHttpContextAccessor>(
                    new CustomHttpContextAccessor(publicPath)
                    );
            })
                          .Configure(app =>
            {
                app.UsePathBase(publicPath);
                app.UseWebpackDevServer();
                app.UseMvcWithDefaultRoute();
            });

            server = new TestServer(builder);
            client = server.CreateClient();
        }
示例#2
0
        public StaticTestContext()
        {
            // We're using a separate web root for
            // each context instance to provide isolation
            // for running the tests in parallel
            var webRootDirectory = $"wwwroot-{Guid.NewGuid().ToString()}";

            assetRoot                    = Path.Combine(Directory.GetCurrentDirectory(), "assets");
            webRoot                      = Path.Combine(Directory.GetCurrentDirectory(), webRootDirectory);
            waitForStorageUpdate         = createTaskCompletionSource();
            waitForStorageContentsUpdate = createTaskCompletionSource();

            startServer();

            void startServer()
            {
                DeployAssets();

                var builder = new WebHostBuilder()
                              .UseContentRoot(WebSite.GetContentRoot())
                              .UseWebRoot(webRoot)
                              .ConfigureServices(services =>
                {
                    services.AddMvc();
                    services.AddWebpack().AddStaticOptions(opts =>
                    {
                        opts.RequestPath           = "/public/";
                        opts.ManifestDirectoryPath = "/dist/";
                        opts.OnPrepareResponse     = respContext =>
                                                     respContext.Context.Response.Headers.Add(
                            key: "Cache-control",
                            value: "public,max-age=31536000"
                            );
                        opts.UseStaticFileMiddleware = true;
                    });

                    services.AddSingleton <IHttpContextAccessor>(
                        new CustomHttpContextAccessor()
                        );
                })
                              .Configure(app => {
                    app.UseWebpackStatic();
                    app.UseMvcWithDefaultRoute();
                });

                server = new TestServer(builder);
                setupWaitingForStorageUpdate();

                client = server.CreateClient();
            }

            void setupWaitingForStorageUpdate()
            {
                var storageService = Services.GetRequiredService <ManifestStorageService>();

                storageService.StorageUpdated         += onStorageUpdated;
                storageService.StorageContentsUpdated += onStorageContentsUpdated;

                void onStorageUpdated()
                {
                    waitForStorageUpdate.TrySetResult(true);
                    storageService.StorageUpdated -= onStorageUpdated;
                }

                void onStorageContentsUpdated()
                {
                    waitForStorageContentsUpdate.TrySetResult(true);
                    storageService.StorageContentsUpdated -= onStorageContentsUpdated;
                }
            }

            TaskCompletionSource <bool> createTaskCompletionSource() =>
            new TaskCompletionSource <bool>(
                TaskCreationOptions.RunContinuationsAsynchronously
                );
        }