Я пытаюсь смоделировать звонки в LUIS через nock, который использует LuisRecognizer из botbuilder-ai. Вот соответствующая информация.
Сам бот вызывает LUIS и получает результат через const recognizerResult = await this.dispatchRecognizer.recognize(context);
. Я получил фактический результат, как показано ниже:
{"text":"I want to look up my order","intents":{"viewOrder":{"score":0.996454835},"srStatus":{"score":0.0172454268},"expediteOrder":{"score":0.0108480565},"escalate":{"score":0.007967358},"qna":{"score":0.00694736559},"Utilities_Cancel":{"score":0.005627355},"manageProfile":{"score":0.004953466},"getPricing":{"score":0.001781322},"Utilities_Help":{"score":0.0007197641},"getAvailability":{"score":0.0005667514},"None":{"score":0.000321137835}},"entities":{"$instance":{}},"sentiment":{"label":"negative","score":0.171873689},"luisResult":{"query":"I want to look up my order","topScoringIntent":{"intent":"viewOrder","score":0.996454835},"intents":[{"intent":"viewOrder","score":0.996454835},{"intent":"srStatus","score":0.0172454268},{"intent":"expediteOrder","score":0.0108480565},{"intent":"escalate","score":0.007967358},{"intent":"qna","score":0.00694736559},{"intent":"Utilities.Cancel","score":0.005627355},{"intent":"manageProfile","score":0.004953466},{"intent":"getPricing","score":0.001781322},{"intent":"Utilities.Help","score":0.0007197641},{"intent":"getAvailability","score":0.0005667514},{"intent":"None","score":0.000321137835}],"entities":[],"sentimentAnalysis":{"label":"negative","score":0.171873689}}}
Для краткости, я просто назову этот «ognizerResult »ниже. Я успешно перехватываю вызов API в моем тестовом файле с помощью nock со следующей конфигурацией:
nock('https://westus.api.cognitive.microsoft.com')
.post(/.*/)
.reply(200,{recognizerResult});
Я пытался возвратить как объект JSON, так и строку, хотя я почти наверняка это должен быть JSON объект, как показано (я высмеиваю вызов QnA maker с тем же подходом, который работает). Когда я запускаю этот тест через mocha, я получаю следующую ошибку:
TypeError: Cannot read property 'replace' of undefined
at LuisRecognizerV2.normalizeName (node_modules\botbuilder-ai\src\luisRecognizerOptionsV2.ts:96:21)
at luisResult.intents.reduce (node_modules\botbuilder-ai\src\luisRecognizerOptionsV2.ts:104:31)
at Array.reduce (<anonymous>)
at LuisRecognizerV2.getIntents (node_modules\botbuilder-ai\src\luisRecognizerOptionsV2.ts:102:32)
at LuisRecognizerV2.<anonymous> (node_modules\botbuilder-ai\src\luisRecognizerOptionsV2.ts:81:27)
at Generator.next (<anonymous>)
at fulfilled (node_modules\botbuilder-ai\lib\luisRecognizerOptionsV2.js:11:58)
at process._tickCallback (internal/process/next_tick.js:68:7)
Я посмотрел на рассматриваемый код в файле luisRecognizerOptionsV2.ts, но не вижу, в чем проблема. Замена - это часть нормализации имени намерения, которая заменяет неподдерживаемые символы на «_». Бот работает нормально при развертывании на Azure (и локально), и тесты работают без насмешливого вызова. Тем не менее, я действительно хочу иметь возможность проверить это без фактических вызовов LUIS. Любые идеи, почему я получаю эту ошибку и как ее исправить?
Для справки, вот макет на QnA Maker, который работает, хотя обратите внимание, что я использую простой вызов REST для этого вместо распознавателя .
nock('https://myqnaservicename.azurewebsites.net')
.post(/.*/)
.reply(200, {"answers": [{"questions": ["I need an unrecognized utterance for testing"], "answer": "I can hear you now!", "score": 28.48, "id": 1234}]});