单元测试是否将 Cors 添加到 ServiceCollection
Unit test if Cors is added to the ServiceCollection
我正在尝试对 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);
}
有没有更好的测试方法?可以获取策略名称并进行测试吗?
如果你想写一个依赖于how CorsOptions
currently works internally的冒烟测试,你可以这样写:
[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);
}
}
请注意,Microsoft 自己使用了一种相当不同的方法,并且 start up npm
using cmd
and actually run JavaScript in a browser to test 如果 CORS 按预期工作。
如果你是 using ASP.NET Core's integration testing setup,你可以通过检查模拟请求的 headers 来做类似的事情,并且减少对扩展方法内部的依赖,更好地测试你真正关心的事情关于:headers 根据您的回复。
我正在尝试对 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);
}
有没有更好的测试方法?可以获取策略名称并进行测试吗?
如果你想写一个依赖于how CorsOptions
currently works internally的冒烟测试,你可以这样写:
[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);
}
}
请注意,Microsoft 自己使用了一种相当不同的方法,并且 start up npm
using cmd
and actually run JavaScript in a browser to test 如果 CORS 按预期工作。
如果你是 using ASP.NET Core's integration testing setup,你可以通过检查模拟请求的 headers 来做类似的事情,并且减少对扩展方法内部的依赖,更好地测试你真正关心的事情关于:headers 根据您的回复。