UNPKG

alexa-app

Version:

A module to simplify creation of Alexa (Amazon Echo) apps (Skills) using Node.js

140 lines (114 loc) 4.99 kB
/*jshint expr: true*/ "use strict"; var chai = require("chai"); var chaiAsPromised = require("chai-as-promised"); var mockHelper = require("./helpers/mock_helper"); chai.use(chaiAsPromised); var expect = chai.expect; chai.config.includeStack = true; import * as Alexa from '..'; describe("Alexa", function() { describe("app", function() { var testApp = new Alexa.app("testApp"); beforeEach(function() { testApp = new Alexa.app("testApp"); }); describe("#request", function() { describe("response", function() { var mockRequest = mockHelper.load("intent_request_launch.json"); context("with an intent request of launchIntent", function() { context("with no launch handler", function() { describe("outputSpeech", function() { it("responds with NO_LAUNCH_FUNCTION message", function() { var subject = testApp.request(mockRequest).then(function(response) { return response.response.outputSpeech; }); return expect(subject).to.eventually.become({ ssml: "<speak>" + testApp.messages.NO_LAUNCH_FUNCTION + "</speak>", type: "SSML" }); }); }); }); context("with a matching intent handler", function() { var expectedMessage = "tubular!"; var expectedReprompt = "sweet reprompt dude!"; describe("outputSpeech", function() { it("handles reprompting correctly", function() { testApp.launch(function(req, res) { res.say(expectedMessage).say(expectedMessage).reprompt(expectedReprompt); }); var subject = testApp.request(mockRequest).then(function(response) { return response.response.outputSpeech; }); return expect(subject).to.eventually.become({ ssml: "<speak>" + expectedMessage + " " + expectedMessage + "</speak>", type: "SSML" }); }); it("combines multiple reprompts?", function() { testApp.launch(function(req, res) { res.say(expectedMessage) .reprompt(expectedReprompt) .reprompt(expectedReprompt); }); var subject = testApp.request(mockRequest).then(function(response) { return response.response.reprompt.outputSpeech; }); return expect(subject).to.eventually.become({ ssml: "<speak>" + expectedReprompt + " " + expectedReprompt + "</speak>", type: "SSML" }); }); it("combines says into a larger response", function() { testApp.launch(function(req, res) { res.say(expectedMessage).say(expectedMessage); }); var subject = testApp.request(mockRequest).then(function(response) { return response.response.outputSpeech; }); return expect(subject).to.eventually.become({ ssml: "<speak>" + expectedMessage + " " + expectedMessage + "</speak>", type: "SSML" }); }); it("responds with expected message", function() { testApp.launch(function(req, res) { res.say(expectedMessage); }); var subject = testApp.request(mockRequest).then(function(response) { return response.response.outputSpeech; }); return expect(subject).to.eventually.become({ ssml: "<speak>" + expectedMessage + "</speak>", type: "SSML" }); }); it("responds with expected message for promise", function() { testApp.launch(function(req, res) { return Promise.resolve().then(function() { res.say(expectedMessage); }); }); var subject = testApp.request(mockRequest).then(function(response) { return response.response.outputSpeech; }); return expect(subject).to.eventually.become({ ssml: "<speak>" + expectedMessage + "</speak>", type: "SSML" }); }); it("handles error for promise", function() { testApp.launch(function(req, res) { return Promise.reject(new Error("promise failure")); }); var subject = testApp.request(mockRequest); return expect(subject).to.be.rejectedWith("promise failure"); }); }); }); }); }); }); }); });