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(); }
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 ); }