Я настраиваю API, который аутентифицируется на другом сервере через JWT.
один из методов контроллера, который я хочу протестировать, получает токен с внешнего сайта.
как я могу проверить этот метод?
Я создал тестовый сервер и попытался имитировать действие веб-сайта, которое предоставляет tokens.i доступ к этому Test Server
с помощью методов тестирования, но я не могу получить доступ к нему с фактического контроллера.
вот мой метод установки тестового сервера
MockedController
- это контроллер, который должен обеспечивать ток, и он работает нормально, и я могу получить токены из тестовых модулей.
AuthController
- это контроллер, который должен проверяться.
var server = new TestServer(
new WebHostBuilder()
.UseEnvironment(TestConstants.EnvironmentName)
.UseStartup<Startup>()
.UseUrls(TestConstants.MockAddress)
.ConfigureTestServices(config =>
{
config.AddOptions();
config.AddMvc()
.SetCompatibilityVersion(Microsoft.AspNetCore.Mvc.CompatibilityVersion.Version_2_2)
.AddApplicationPart(typeof(AuthController).Assembly)
.AddApplicationPart(typeof(MockedTokenController).Assembly)
;
config.AddSingleton<MockedTokenController>();
config.BuildServiceProvider();
}));
server.BaseAddress = new Uri(TestConstants.MockAddress);
server.CreateHandler();
_client = server.CreateClient();
_client.BaseAddress = new Uri(TestConstants.MockAddress);// I tried with and without this line
Вот метод испытания, который не работает
var request = new HttpRequestMessage(HttpMethod.Get, "/Auth/Login");
var response = await _client.SendAsync(request);
var contents = await response.Content.ReadAsStringAsync();
Assert.Equal(HttpStatusCode.OK, response.StatusCode);
Вот код метода входа AuthController
[HttpGet("Login")]
public async Task<IActionResult> LoginAsync(){
var token = await _authService.GetAuthenticationTokenAsync();
return Ok(token);
}
вот код AuthService, который вызывается из AuthController
public async Task<string> GetAuthenticationTokenAsync(){
HttpClient client = new HttpClient();
var response = await client.SendAsync(request,
HttpCompletionOption.ResponseContentRead);
response.EnsureSuccessStatusCode();
var token = await response.Content.ReadAsStringAsync();
return token;
}
дополнительная информация.
Метод тестирования для макета контроллера работает нормально.
Кажется, проблема во втором шаге использования макета контроллера. первый шаг работает отлично. Я имею в виду, что на первом шаге я могу получить доступ к проверенному контроллеру из тестового модуля, но когда я пытаюсь получить к нему доступ через главный контроллер (AuthController), я не могу получить к нему