Тест интеграции ядра 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();
})