我正在使用 Python 的 ask-sdk 编写一个用 Python 编写的 Alexa Skill。此技能在侦听端口 5000 的 Flask 服务器上自托管运行。现在我想使用 Bespoken Framework 集成单元测试。
我的 testing.json 文件如下所示:
{
"locales": "de-DE",
"interactionModel": "models/de-DE.json",
"trace": true,
"jest": {
"silent": true
},
"skillURL": "http://localhost:5000"
}
我在端口 9998 上本地运行 http.server 以获取 report.html。测试成功通过,但代码覆盖率无法正常工作。似乎这个技能中使用的文件根本无法识别。相反,他们正在查找文件 slides.js、debugger.js、jquery.js
-----------------------------------------|----------|----------|
File | % Stmts | % Branch |
-----------------------------------------|----------|----------|
All files | 0 | 0 |
docutils/writers/s5_html/themes/default | 0 | 0 |
slides.js | 0 | 0 | ...
werkzeug/debug/shared | 0 | 0 |
debugger.js | 0 | 0 |
jquery.js | 0 | 0 |
-----------------------------------------|----------|----------|
Test Suites: 1 passed, 1 total
Tests: 11 passed, 11 total
Snapshots: 0 total
Time: 9.475s
我遵循了本指南https://read.bespoken.io/cli/tutorials/tutorial-flask-ask-python/#getting-started。
因此,我查找了常见问题解答并从https://read.bespoken.io/unit-testing/faq/#what-are-continuous-integration-ci-and-automated-unit-testing获得了这些信息:
我可以对用 Javascript 以外的编程语言编写的技能进行单元测试吗? 是的你可以。它确实需要在您的笔记本电脑上本地运行我们的图书馆可以调用的服务器,否则它将“正常工作”。
在运行测试之前,启动服务器以接收有效负载。它将监听类似:http://localhost:9000 的内容。
在 testing.json 文件的 SkillURL 配置元素中设置该 URL。这应该设置而不是处理程序元素 - 处理程序仅适用于 Javascript lambdas/functions。
运行测试后,关闭服务器 - 我们建议将此作为常规过程的一部分。例如,它可以添加到我们的过滤器之一 - 在此处阅读过滤器 XXX。最后,如果您对请求执行请求签名检查或时间戳过滤,则需要禁用此功能。
这是我的 app.py:
SB = SkillBuilder()
app = Flask(__name__)
app.config.setdefault(VERIFY_SIGNATURE_APP_CONFIG, False)
id = "XXXX"
skill_obj = SB.create()
webservice_handler = WebserviceSkillHandler(skill=skill_obj)
webservice_handler.verify_signture = False
skill_adapter = SkillAdapter(skill=skill_obj, skill_id=id, app=app)
skill_adapter.VERIFY_SIGNATURE_APP_CONFIG = False
skill_adapter.register(app=app, route="/")
if __name__ == '__main__':
if 'ASK_VERIFY_REQUESTS' in os.environ:
verify = str(os.environ.get('ASK_VERIFY_REQUESTS', '')).lower()
if verify == 'false':
app.config['ASK_VERIFY_REQUESTS'] = False
app.run(host='0.0.0.0', port=5000, debug=True)
我很感谢任何想法!