Тест интеграции ядра AspNet для SignalR

Есть ли, чтобы проверить SignalR с помощью TestServer генерируется как часть интеграционных тестов ( https://docs.microsoft.com/en-us/aspnet/core/test/integration-tests view = aspnetcore-2.1)?

Все мои попытки не смогли выполнить рукопожатие TestServer сбой экземпляра с исключением: System.Net.Sockets.SocketException : No connection could be made because the target machine actively refused it

Работает в Debug/Console/IIS работает отлично

Код сервера

 public void Configure(...)
 {
     ...
     app.UseSignalR(router => router.MapHub<MockHub>("/ws"));
     ...
}

TestCode

        ...
        var server = factory.Server;
        var connection = new HubConnectionBuilder()
              .WithUrl(server.BaseAddress)
              .Build();
        await connection.StartAsync();

3 ответа

Похоже TestServer требует от вас использовать HttpMessageHandler созданный им, поэтому измените свой код на

.WithUrl(new Uri(server.BaseAddress, "ws"), o => { o.HttpMessageHandlerFactory = _ => server.CreateHandler(); })

Он должен работать. Единственное, что я вижу явно неправильно, это то, что вы передаете только адрес тестового хоста WithUrlтогда как это должен быть полный путь к вашему хабу, то есть что-то вроде:

.WithUrl(new Uri(server.BaseAddress, Consts.TethysWebSocketPath))

Приведенный выше ответ Бреннана великолепен: если вы хотите использовать токен доступа, вам нужно будет добавить еще одну строку к этому решению.

      string accessToken = // getting it from someplace.
builder.WithUrl(new Uri(server.BaseAddress, "ws"), o =>
{
    o.AccessTokenProvider = () => Task.FromResult<string?>(accessToken);
    o.HttpMessageHandlerFactory = _ => server.CreateHandler();
})
Другие вопросы по тегам