This library allows developers to write automated testing for their actions in Node.js.
Examples can be found in the /examples directory for two sample apps.
The Assistant SDK is used to give developers programmatic access to the Assistant and returns debug information about their actions that are in a test state.
Note: This library is currently in an alpha, experimental state. APIs may break between releases. Feedback and bugs can be provided by filing an issue in this repository.
- Go to the Actions console
- Create a new project. This project can be independent of your other projects.
- You can use this project to test any of your actions that are in a test state
- For this new project, enable the Google Assistant API
- Go to the Device Registration section.
- Click REGISTER MODEL
- Fill out the product and manufacturer name
- Set the Device type to Light, although the choice does not matter
- Download the
credentials.jsonfile - Use this credentials file to generate test credentials:
node generate-credentials.js /path/to/credentials.json- Copy and paste the URL and enter the authorization code. You will see a response similar to the following:
Saved user credentials in "test-credentials.json"
- Create a JavaScript file for your tests:
test.js
'use strict'; const { ActionsOnGoogleAva } = require('actions-on-google-testing'); const { expect } = require('chai'); // Library will try to obtain credentials from environment variables in case // credentials file is not specified const action = new ActionsOnGoogleAva(require('./test/test-credentials.json')); // Start out with giving a name to this test action.startTest('Facts about Google - direct cat path', action => { // Return a promise that starts a conversation with your test app return action.start() .then(({ textToSpeech }) => { // Get a response back from your fulfillment. // To continue the conversation, you can send // a new text query. This starts the next // turn of the conversation. return action.send('cats'); }) .then(({ ssml }) => { // The entire set of responses are listed below. // You can use Chai to verify responses. expect(ssml[0]).to.have.string("Alright, here's a cat fact.") }) });- Run
yarn - Update your
package.jsonto add this test file to your test script.
"scripts": { "test": "./node_modules/.bin/ava -c 1 -s ./test.js" },- Run
yarn test. You should see your test be executed.
NOTE You can also alternatively set the following environment variables - ACTIONS_TESTING_CLIENT_ID,ACTIONS_TESTING_CLIENT_SECRET, ACTIONS_TESTING_REFRESH_TOKEN - to authenticate your Actions project with the Assistant SDK.
This library provides the following features to control your conversation:
action.start()- Start your conversation with your action using "my test app".action.startWith()- Start your conversation with your action using the specified action name.action.send()- Send some phrase to your action.action.cancel()- End your conversation. This library says "cancel".action.locale- Set a locale for your conversation.action.location- Set an array of a latitude and a longitude.
These responses will come from your fulfillment, and will consist of whatever objects that you return.
res .micOpen - Boolean .textToSpeech - String[] .displayText - String[] .ssml - String[] .cards - Card[] .title - String .subtitle - String .text - String .imageUrl - String .imageAltText - String .buttons - Button[] .title - String .url - String .carousel - Array for Browse Carousel or Selection Carousel .title - String .description - String, .imageUrl - String, .imageAltText - String, .url - String .list .title - String .items - Item[] .title - String .description - String .imageUrl - String .imageAltText - String .mediaResponse .type - String .name - String .description - String .sourceUrl - String .icon - String .suggestions - String[] .linkOutSuggestion .url - String .name - String .table .headers - String[] .rows - Row[] .cells - String[] .divider - Boolean - Testing transactions does not work
- Testing smart home fulfillment does not work
- Unable to set surface capabilities
- Selecting an item for a ListSelect and CarouselSelect do not work
See LICENSE