botium-actions-on-google-testing
Version:
This is an end-to-end testing library for developers building actions
147 lines (122 loc) • 5.09 kB
Markdown
This library allows developers to write automated testing for their actions in Node.js.
[](https://www.npmjs.org/package/actions-on-google-testing)
Examples can be found in the `/examples` directory for two sample apps.
The [Assistant SDK](https://developers.google.com/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.**
1. Go to the [Actions console](http://console.actions.google.com)
2. 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
3. For this new project, enable the [Google Assistant API](https://console.developers.google.com/apis/api/embeddedassistant.googleapis.com/overview)
4. Go to the **Device Registration** section.
5. Click **REGISTER MODEL**
1. Fill out the product and manufacturer name
1. Set the Device type to *Light*, although the choice does not matter
6. Download the `credentials.json` file
7. Use this credentials file to generate test credentials:
```bash
node generate-credentials.js /path/to/credentials.json
```
8. 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"`
9. Create a JavaScript file for your tests: `test.js`
```javascript
'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.")
})
});
```
10. Run `yarn`
11. Update your `package.json` to add this test file to your test script.
```JSON
"scripts": {
"test": "./node_modules/.bin/ava -c 1 -s ./test.js"
},
```
12. 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`