Before and After actions
Alba lets you register actions that run immediately before or after each scenario's HTTP request for common setup or teardown work like setting up authentication credentials or tracing. Registrations are additive — every registered action runs for every scenario.
There are two kinds of before actions:
BeforeEachAsync(Func<Scenario, Task>)— asynchronous preparation that runs before the HTTP request is created. It receives theScenario, so it can do real asynchronous work (fetch a token, hit a database) and then modify the outgoing request throughscenario.ConfigureHttpContext(...)or helpers likescenario.WithRequestHeader(...)andscenario.WithBearerToken(...).BeforeEach(Action<HttpContext>)— synchronous work that runs against the liveHttpContextimmediately before the request executes.
All asynchronous prepare actions run first (in registration order), then all synchronous actions (in registration order).
Here's a sample:
cs
// Synchronously
system.BeforeEach(context =>
{
// Modify the HttpContext immediately before each
// Scenario()/HTTP request is executed
context.Request.Headers.Append("trace", "something");
});
system.AfterEach(context =>
{
// perform an action immediately after the scenario/HTTP request
// is executed
});
// Asynchronously, before the HTTP request executes. Modify the
// outgoing request itself through scenario.ConfigureHttpContext()
system.BeforeEachAsync(scenario =>
{
// do something asynchronous here
return Task.CompletedTask;
});
system.AfterEachAsync(context =>
{
// do something asynchronous here
return Task.CompletedTask;
});