Можем ли мы использовать тест для ответов Adaptive Card с помощью TestAdaptor и TestFlow?BotFramework - PullRequest
0 голосов
/ 02 мая 2019

Писал несколько тестов в корпоративном шаблоне 4.2.2 бота, который до сих пор отлично работал для текстовых ответов. Однако, когда в процессе участвуют адаптивные карты, есть ли способ получить доступ к вложениям, чтобы убедиться, что все работает как задумано?

В этом диалоговом окне, когда выбрано программное обеспечение, адаптивная карта отправляется обратно. Похоже, это со стороны клиента. https://imgur.com/a/aEDwFYl

[TestMethod]
        public async Task TestSoftwareIssue()
        {
            string resp = "What sort of issue do you have?\n\n" +
                            "   1. Computer\n" +
                            "   2. Software\n" +
                            "   3. Insuffient Permissions for Access\n" +
                            "   4. Account expired\n" +
                            "   5. Other";
            await GetTestFlow()
                .Send(GeneralUtterances.GeneralIssue)
                .AssertReply(resp)
                .Send("software")
                // Check attachment somehow?
                .AssertReply("")
                .StartTestAsync();
        }

Любой совет о том, как можно проверить вывод адаптивных карт, был бы полезен.

Я думаю, что должен быть какой-то способ доступа к прикрепленным файлам активности от бота, отправленного пользователю, с некоторыми трудностями при определении того, как это можно сделать прямо сейчас.

Спасибо!

1 Ответ

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

Итак, после некоторого изучения, мы нашли один способ решить эту проблему с помощью этой функции, которая является частью TestFlow.


/// <param name="validateActivity">A validation method to apply to an activity from the bot.
/// This activity should throw an exception if validation fails.</param>

public TestFlow AssertReply(Action<IActivity> validateActivity, [CallerMemberName] string description = null, uint timeout = 3000)

Затем мы можем создать нашу собственную функцию проверки, которая может обрабатывать утверждения.

public void CheckAttachment(IMessageActivity messageActivity)
{
    // Check if content is the same
    var messageAttachment = messageActivity.Attachments.First();
    // Example attachment
    var adaptiveCardJson = File.ReadAllText(@".\Resources\TicketForm.json");

    var expected = new Attachment()
    {
        ContentType = "application/vnd.microsoft.card.adaptive",
        Content = JsonConvert.DeserializeObject(adaptiveCardJson),
    };

    Assert.AreEqual(messageAttachment.Content.ToString(), expected.Content.ToString());
}

[TestMethod] может тогда работать примерно так:

[TestMethod]
public async Task TestSoftwareIssue()
{
    await GetTestFlow()
        .Send(GeneralUtterances.GeneralIssue)
        .AssertReply("Some Response")
        .Send("Some Choice")
        // .AssertReply("")
        .AssertReply(activity => CheckAttachment(activity.AsMessageActivity()))
        .StartTestAsync();
}
...