Тест интеграции ASP.NET - TestHost всегда возвращает 500 Внутренняя ошибка сервера
В настоящее время я использую xUnit для написания интеграционных тестов и так быстро, что я только попытался написать единственный тест для моего AuthController, чтобы проверить, работает ли аутентификация (это работает, кстати. Я просто хочу иметь тесты).
Я не знаю, что я настраиваю неправильно, но каждый раз, когда я запускаю свой тест, я получаю 500 внутренних ошибок сервера:
Failed AuthControllerIntegrationTests.CanLogin
Error Message:
System.Net.Http.HttpRequestException : Response status code does not indicate success: 500 (Internal Server Error).
[xUnit.net 00:00:02.19] AuthControllerIntegrationTests.CanLogin [FAIL]
Failed AuthControllerIntegrationTests.CanLogin
Error Message:
System.Net.Http.HttpRequestException : Response status code does not indicate success: 500 (Internal Server Error).
Мой тест выглядит так:
[Fact]
public async Task CanLogin()
{
var webHostBuilder =
new WebHostBuilder()
.UseEnvironment("Development")
.UseConfiguration(new ConfigurationBuilder()
.AddJsonFile("appsettings.json")
.Build())
.UseStartup<Startup>();
using (var server = new TestServer(webHostBuilder))
using (var client = server.CreateClient())
{
client.DefaultRequestHeaders.Accept.Add(
new MediaTypeWithQualityHeaderValue("application/json"));
object password = new {
password = "password"
};
var httpResponse = await client.PostAsJsonAsync("/api/authenticate", password);
httpResponse.EnsureSuccessStatusCode();
}
}
Я даже не знаю, как отладить это... все, что я вижу в отладчике кода Visual Studio, - это 500 ответов. Halp
РЕДАКТИРОВАТЬ: Вот действие контроллера, которое я хотел бы проверить:
[AllowAnonymous]
[HttpPost("authenticate")]
public IActionResult Authenticate([FromBody]AuthDTO input)
{
var token = _authService.Authenticate(input.Password);
if (token == null)
return BadRequest(new { message = "Incorrect password!" });
return Ok(new
{
token = new JwtSecurityTokenHandler().WriteToken(token)
});
}
Я пытался модифицировать контроллер, чтобы он всегда возвращал ответ Ok Http, но в тесте я все равно получил 500 внутренних ошибок сервера.
1 ответ
Проблема была просто в том, что я дурак, и я пытался отправить запрос на /api/authenticate
вместо /api/auth/authenticate