我试图对ServiceCollection是否包含Cors进行单元测试。
public static class ServiceExtensions
{
public static void ConfigureCors(this IServiceCollection services)
{
services.AddCors(options =>
{
options.AddPolicy("CorsPolicy",
builder => builder.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader()
.AllowCredentials());
});
}
}下面是我到目前为止能写的东西,
[Fact]
private void Extension_ShouldSetCors()
{
IServiceCollection services = new ServiceCollection();
services.ConfigureCors();
Assert.True(services.Count > 0);
}有更好的方法来测试吗?可能会得到策略名并测试它?
发布于 2019-06-23 21:56:12
如果您想要编写依赖于在内部工作的烟雾测试,可以编写以下内容:
[Fact]
public void Extension_ShouldSetCors()
{
IServiceCollection services = new ServiceCollection();
services.ConfigureCors();
Assert.True(services.Count > 0);
using (var scope = services.BuildServiceProvider().CreateScope())
{
var options = scope.ServiceProvider.GetService<IOptions<CorsOptions>>();
Assert.NotNull(options);
Assert.NotNull(options.Value);
var expectedPolicy = options.Value.GetPolicy("CorsPolicy");
Assert.True(expectedPolicy.AllowAnyOrigin);
Assert.True(expectedPolicy.AllowAnyMethod);
Assert.True(expectedPolicy.AllowAnyHeader);
Assert.True(expectedPolicy.SupportsCredentials);
}
}请注意,微软自己使用了一种完全不同的方法,如果CORS按预期工作,则使用cmd和实际的在浏览器中运行JavaScript以进行测试。
如果您是使用ASP.NET核心的集成测试设置,则可以通过检查模拟请求上的头来做类似的事情,减少对扩展方法内部的依赖,更好地测试实际关心的内容:响应中的头。
https://stackoverflow.com/questions/56684909
复制相似问题