Alternative Bootstrapping Methods
Whilst AlbaHost.For<T>
is the preferred way of bootstrapping, other options exist in Alba to cover some older & alternative scenarios.
Initializing AlbaHost with IHostBuilder Directly
To bootstrap a ASP.NET Core Startup.cs-style application, create a AlbaHost
using the definition of your IHostBuilder
as shown below:
[Fact]
public async Task build_host_from_Program()
{
// Bootstrap your application just as your real application does
var hostBuilder = Program.CreateHostBuilder(Array.Empty<string>());
await using var host = new AlbaHost(hostBuilder);
// Just as a sample, I'll run a scenario against
// a "hello, world" application's root url
await host.Scenario(s =>
{
s.Get.Url("/");
s.ContentShouldBe("Hello, World!");
});
}
TIP
There are both synchronous and asynchronous methods to bootstrap an AlbaHost
. Depending on your test harness, I recommend using the asynchronous version whenever applicable.
Or alternatively, you can use one of the Alba extension methods off of IHostBuilder
to start an AlbaHost
object in a fluent interface style:
[Fact]
public async Task fluent_interface_bootstrapping()
{
await using var host = await Program
.CreateHostBuilder(Array.Empty<string>())
.StartAlbaAsync();
// Just as a sample, I'll run a scenario against
// a "hello, world" application's root url
await host.Scenario(s =>
{
s.Get.Url("/");
s.ContentShouldBe("Hello, World!");
});
}
The AlbaHost
is an extension of the standard .Net Core IHost interface with a few additions for testing support. While you can always access the underlying TestServer
through the IAlbaHost.Server
property, you're mostly going to be using the Scenario()
method to write Alba "Scenario" tests.
TIP
If you build a AlbaHost
with AlbaHost.ForStartup<T>()
, it will try to guess at the content root path by the name of assembly that holds the Startup
class, but you may need to override that yourself.