Тест интеграции ASP.NET - TestHost всегда возвращает 500 Внутренняя ошибка сервера - PullRequest
0 голосов
/ 10 мая 2019

В настоящее время я использую 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

EDIT : вот действие контроллера, которое я хотел бы проверить:

[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 Ответ

0 голосов
/ 11 мая 2019

Проблема была просто в том, что я дурак, и я пытался отправить запрос на /api/authenticate вместо /api/auth/authenticate

...