Awesome
generator-spark-bot
generator-spark-bot
is a yeoman generator that scaffolds out a node Cisco Spark bot following anevent-driven
fashion, and is extremely easy to get started with.trigger context => callback()
Designed with simplicity and usability in mind:
- Fast to get started, just drop a
.js
file within/commands
and your bot will register a listener on start - Easier unit testing with access to commands' private methods
- Includes Flint for a more robust framework
Usage
Ensure yeoman is is installed:
npm install -g yo
or yarn global add yo
After yeoman is installed:
$ mkdir project-name
$ cd project-name
$ yo spark-bot
App Structure
.
├── commands # Event handlers are within the commands
│ └── example.js # An example command for reference
├── app.js # Bot entry point
├── config.js # Configurations
├── test.js # AVA Test
├── readme.md
├── license
└── package.json
Commands
Commands will instruct the bot on when and how to respond to particular contextual triggers.
To add a command, simply add a .js
file within the commands directory. When the bot is initializing, commands will automatically register with Flint at runtime.
These command must implement an interface that contains a trigger
property and a callback
method. Refer to example.js
within the commands directory.
trigger | <RegEx>
, <string>
The contextual trigger that will cause the bot to execute the callback upon matches.
callback | <function>
The function to be executed (event handler).
Command Sub-generator
yo spark-bot:command
For convenience, the :command
sub-generator will generate a new command within the /commands
directory.
Scripts
npm run test
- Run linter and unit testnpm start
- Start the botnpm run debug
- Activate debugging to log
Unit Testing
Unit testing is straightforward, simple, and already configured with the AVA test runner. Commands are accessible through the fileName
as a property of the commands
object. Thus, any command callbacks can be tested as such: commands.fileName.callback
.
In addition, the rewire
module is pre-configured to test private methods and is easily accessible without the need of exporting any private methods. This is done with the __get__()
method. IE: commands.example.__get__('buildExampleMessage')
.
Tech Dependencies
Test Runner
- AVA - 🚀 Futuristic JavaScript test runner
Linter
- XO - JavaScript happiness style linter
Framework
- Express - Fast, unopinionated, minimalist web framework for node.
- Flint - Cisco Spark Bot SDK for Node JS
License
MIT © Brandon Him