我正在开发节点中的Alexa技能,我想知道如何对我的代码进行单元测试。我正在使用亚马逊发布的alexa sdk。
我发现有许多库可以实现这一目标,但它们似乎是在alexa sdk可用之前开发的。
提前致谢。
答案 0 :(得分:5)
我们专门设计了Alexa仿真器,以便对Alexa技能进行简单的单元测试和功能测试:
http://docs.bespoken.tools/en/latest/tutorials/tutorial_bst_emulator_nodejs/
有了它,你可以这样打电话:
alexa.launched(function (error, response) {
alexa.spoken('About the podcast', function (error, response) {
assert.equal(response.response.outputSpeech.ssml, '<speak> Some SSML </speak>');
done();
});
});
此测试代码模仿用户启动该技能并说“关于播客”。这些交互会自动转换为正确的Alexa JSON请求,然后将这些请求发送到您的技能代码。
您还可以创建更复杂的单元测试,这些单元测试依赖于跨交互模仿Alexa设备的内部状态。这些在教程中有所描述。
答案 1 :(得分:0)
我正在使用alexa-skill-test-framework和mocha来生成alexa intent json。可以使用localstack在本地PC中设置AWS服务,Carrierwave Direct支持DynamoDB,SQS,Lambda和其他服务
答案 2 :(得分:0)
lex-bot-tester是为Amazon Alexa和Lex创建对话测试的框架和工具。
不使用技能的模拟版本,而是使用现有的SMAPI来处理Alexa。
可以手动创建测试,也可以使用名为urutu
的工具自动生成测试。现在,代码生成是python
,但技能实现可以使用任何支持的语言。
从命令行与Skill交互后,定义对话,生成的代码如下所示
#! /usr/bin/env python
import sys
import unittest
from lex_bot_tester.aws.alexa.alexaskilltest import AlexaSkillTest
verbose = True
class GeneratedTests(AlexaSkillTest):
def test_book_my_trip_reserve_car(self):
"""
Test generated by urutu on 2018-02-21 01:24:51
"""
skill_name = 'BookMyTripSkill'
intent = 'BookCar'
conversation = [{'slot': None, 'text': 'ask book my trip to reserve a car', 'prompt': None},
{'slot': 'CarType', 'text': 'midsize',
'prompt': 'What type of car would you like to rent, Our most popular options are economy, midsize, and luxury'},
{'slot': 'PickUpCity', 'text': 'vancouver',
'prompt': 'In what city do you need to rent a car?'},
{'slot': 'PickUpDate', 'text': 'tomorrow',
'prompt': 'What day do you want to start your rental?'},
{'slot': 'ReturnDate', 'text': 'next week',
'prompt': 'What day do you want to return the car?'},
{'slot': 'DriverAge', 'text': '25', 'prompt': 'How old is the driver for this rental?'}]
simulation_result = self.conversation_text(skill_name, intent, conversation, verbose=verbose)
self.assertSimulationResultIsCorrect(simulation_result, verbose=verbose)
if __name__ == '__main__':
unittest.main()
Testing Alexa Skills — Autogenerated tests有一个更详细的解释和一些视频。
答案 3 :(得分:0)
我们正在使用MochaJs和ChaiJs测试我们在nodeJs中的Alexa技能
我们遵循this教程来构建我们的环境。
我们在package.json
中添加了dev依赖项 "devDependencies": {
"aws-lambda-mock-context": "^3.1.1",
"chai": "^4.1.2",
"chai-as-promised": "^7.1.1",
"mocha": "^5.0.4"
}
我们有一个测试文件夹,其中包含来自Alexa Developer Console的几个测试请求,我们对其进行单元测试。
我们的测试test / index.html
var Alexa = require(&#39; alexa-sdk&#39;);
const handlers = {
'LaunchRequest': require('launchRequest')
//other handlers
};
exports.handler = function(event, context, callback) {
const alexa = Alexa.handler(event, context, callback);
alexa.registerHandlers(handlers);
alexa.execute();
};
要运行测试,只需运行此cmd
即可$ mocha
答案 4 :(得分:0)
对于Java,我以此方式创建了一个单元测试。
class GetMyRequestHandlerTest {
RequestHandler requestHandler = new GetMyRequestHandler();
@Test
void canHandle(){
HandlerInput input = CreateSampleInput();
boolean result = requestHandler.canHandle(input);
assertTrue(result);
}
@Test
void handle() {
HandlerInput input = CreateSampleInput();
Optional<Response> response = requestHandler.handle(input);
assertFalse(response.equals(null));
}
private HandlerInput CreateSampleInput()
{
HandlerInput.Builder handlerInputBuilder = HandlerInput.builder();
Intent intent = Intent.builder().withName(Constants.GetMyIntent)
.putSlotsItem(Constants.SlotNumber, Slot.builder().withName(Constants.SlotNumber).withValue("4").build())
.build();
Request request = IntentRequest.builder().withIntent(intent).build();
Session session = Session.builder().putAttributesItem(Attributes.STATE_KEY, Attributes.STATE_NUMBER).build();
RequestEnvelope requestEnvelope = RequestEnvelope.builder().withRequest(request)
.withSession(session)
.build();
HandlerInput input = handlerInputBuilder.withRequestEnvelope(requestEnvelope)
.build();
return input;
}