Jest + Virtual AlexaでAlexaスキルのローカルテスト
Lambdaをinvokeした時のテストですが、2019年8月時点でのデファクトはVirtual Alexaかなと思います。 ということで2018年は違うことを言っていた気もしますが、Virtual Alexaでテストす […]
広告ここから
広告ここまで
目次
Lambdaをinvokeした時のテストですが、2019年8月時点でのデファクトはVirtual Alexaかなと思います。
ということで2018年は違うことを言っていた気もしますが、Virtual Alexaでテストする方法をざっとまとめます。
セットアップ
npm からインストールしましょう。
$ npm i -D virtual-alexa jest
// TypeScriptの場合
$ npm i -D ts-jest @types/jest
Jestをランナーとして使うので、以下のようにファイルを配置します。
$ mkdir -p __tests__/integration
$ touch __tests__/integration/index.test.ts
また、package.jsonは以下のように記述しておきます。
"scripts": {
"test:integration": "jest __tests__/integration/*"
テストコードの配置
__tests__/integration/index.test.ts
にテストコードを書いていきましょう。
import {VirtualAlexa} from 'virtual-alexa'
import { handler } from '../../index'
describe('test', () => {
it("Accepts responses without dollars", async function () {
const alexa = VirtualAlexa.Builder()
.handler(handler)
.interactionModelFile("../../models/ja-JP.json")
.create();
alexa.dynamoDB().mock()
const launchResponse = await alexa.launch();
expect(launchResponse.response.outputSpeech.ssml).toContain( "Welcome to guess the price");
})
})
interactionModelFile
のパスに注意
ここで指定するパスは、テストを実行するディレクトリ(package.jsonのある場所)を基準とします。
importする時のノリで、テストコードの記述されたファイルからのパスのつもりで指定すると「ファイルがない」と怒られますので注意しましょう。
テストを実行する
あとはnpm run test:integration
でテストを実行しましょう。
✕ Accepts responses without dollars (88ms)
● test › Accepts responses without dollars
expect(received).toContain(expected) // indexOf
Expected substring: "Welcome to guess the price"
Received string: "<speak><p>サンプルゲームへようこそ!。</p><p>遊び方が知りたい場合は、「ヘルプ」と話しかけてください。。</p><p>早速ゲームを始めますか?</p></speak>"
20 |
21 | const launchResponse = await alexa.launch();
> 22 | expect(launchResponse.response.outputSpeech.ssml).toContain( "Welcome to guess the price");
| ^
23 | })
24 | })