Интеграционный тест с ядром SignalR и HubContext - PullRequest
0 голосов
/ 23 октября 2019

Я следовал этому сообщению в блоге , чтобы написать несколько интеграционных тестов с ASP.NET Core SignalR, и он прекрасно работает при отправке сообщений непосредственно на Hub , но не через HubContext. Порядок выполнения кода изменяется при использовании HubContext.

[TestMethod]
public async Task HubContextHack()
{
    //configure TestServer code ommitted

    var hubContextMsg = string.Empty;
    connection.On<string>("OnMessageRecievedFromHubContext", msg =>
    {
        hubContextMsg = msg;
    });
    connection.On<string>("OnMessageRecievedFromHub", msg =>
    {
        hubMsg = msg;
    });
    await connection.StartAsync();

    var message = "Integration Testing in Microsoft AspNetCore SignalR";
    var hubContext = server.Host.Services
          .GetService<IHubContext<StrongEchoHub, IStrongEchoHub>>();
    await hubContext.Clients.All.OnMessageRecievedFromHubContext(message);
    //if I uncomment out this line my test passes as
    //the execution order of my code changes
    //await connection.InvokeAsync("SendFromHub", "blah " + message);

    hubContextMsg.Should().Be(message);
}

Если я поставлю точку останова в hubContextMsg = msg;, то эта строка будет выполнена, но только после выполнения hubContextMsg.Should().Be(message);.

screen recording of execution of integration test

Полный тестовый проект здесь .


Почему вызов await connection.InvokeAsync(...); делаетon обработчики запускаются перед выполнением кода, который идет после него?

Как мне получить такое же поведение при использовании HubContext?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...