Security News
RubyGems.org Adds New Maintainer Role
RubyGems.org has added a new "maintainer" role that allows for publishing new versions of gems. This new permission type is aimed at improving security for gem owners and the service overall.
botkit-mock
Advanced tools
npm install --save botkit-mock
botkit-mock
in your test: const { BotMock } = require('botkit-mock');
const fileBeingTested = require("./indexController")
Botkit depends on adapters (Slack, Facebook, MS Teams, etc).
Botkit-Mock is an extension of Botkit that provides an interface for accepting user messages through .usersInput
. You can connect any valid Botkit adapters to Botkit-Mock to extend Botkit-Mock, although currently, we have only provided an extension for Slack.
Assuming you have a controller written like below:
module.exports = function(controller) {
// simple answer
controller.hears(['help'], 'direct_message', function (bot, message) {
bot.reply(message, 'help message');
});
}
You can write a describe block to test your controller:
const { BotMock, SlackApiMock } = require('botkit-mock');
const {SlackAdapter, SlackMessageTypeMiddleware, SlackEventMiddleware} = require('botbuilder-adapter-slack');
const yourController = require("./yourController");
describe('slack message',()=>{
beforeEach(()=>{
const adapter = new SlackAdapter(SlackApiMock.slackAdapterMockParams);
adapter.use(new SlackEventMiddleware());
adapter.use(new SlackMessageTypeMiddleware());
this.controller = new BotMock({
adapter: adapter,
disable_webserver: true
});
SlackApiMock.bindMockApi(this.controller);
yourController(this.controller);
});
});
In your it
statement, use the controller.usersInput
method to define the conversation.
it('should return `help message` if user types `help`', async () => {
const message = await this.controller.usersInput(
[
{
type: "message",
user: 'someUserId',
channel: 'someChannel',
messages: [
{
text: 'help', isAssertion: true
}
]
}
]
);
return assert.equal(message.text, 'help message');
});
/* example of botkit response
{
type: 'message',
text: 'help message',
attachmentLayout: undefined,
attachments: undefined,
suggestedActions: undefined,
speak: undefined,
inputHint: undefined,
summary: undefined,
textFormat: undefined,
importance: undefined,
deliveryMode: undefined,
expiration: undefined,
value: undefined,
channelData:
{
channelId: 'slack',
serviceUrl: '',
conversation: {
id: 'someChannel',
thread_ts: null
},
from:
{
id: ''
},
recipient: { id: 'someUserId' } },
channelId: 'slack',
serviceUrl: undefined,
conversation: { id: 'someChannel', thread_ts: null },
from: { id: undefined },
recipient: { id: 'someUserId' }
}
*/
user
user slackId (required) (string)channel
is a channel where user sends messages (required) (string)type
specify botkit message type. ie direct_message
, message_received
, interactive_message_callback
. (defaults to direct_message
) (string)messages
(array) that includes:
isAssertion
indicates which conversation response array to return in .then()
in multi-user testing. (required) (boolean)deep
indicates the index of the conversation response to return in .then()
. 0 (default) is the last response, 1 is the second-to-last, etc.. (integer)timeout
set timeout for message in milliseconds (integer)waitBefore
alias for timeout
, indicates how many milliseconds to wait before sending the message to the bot (integer)waitAfter
indicates how many milliseconds to wait for the bot response, useful for long-running commands (integer)text
the message's text (string)channel
indicates the channel the message was sent in. This overrides the channel defined in usersInput
for this current message. (string)attachments
, callback_id
, etc...The Slack adapter is located in ./lib/slack. The ApiMock allows you to test Slack's API. It binds the following properties to the Botkit-Mock controller
.
controller.axiosMockAdapter
- Axios mock helps to mock requests to the Slack API. Examples of this are used in ./examples/general-slack/updateApiResponsesSpec.controller.apiLogByKey
- This contains information about results of requests through bot.api
.controller.httpBodyLog
- This contains an array of Botkit responses to Slack usually set through httpBody()
.Botkit-Mock supports all of Botkit's core functionality by default, but we need help creating adapters for platforms other than Slack. To add functionality to Botkit-Mock for your favorite chat platform, please open an issue and we can advise.
Botkit Starter Kit - Tests for the Botkit starter kit (Glitch)
Slack API - Tests for various Slack API calls. Includes API response overrides.
Built by the team at https://www.gratify.ai.
Like Botkit-Mock? Donate BTC to our team: 1KwpqzTvpLWiUST2V5wmPiT3twwc1pZ9tP
FAQs
Write tests for botkit.
We found that botkit-mock demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 2 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
RubyGems.org has added a new "maintainer" role that allows for publishing new versions of gems. This new permission type is aimed at improving security for gem owners and the service overall.
Security News
Node.js will be enforcing stricter semver-major PR policies a month before major releases to enhance stability and ensure reliable release candidates.
Security News
Research
Socket's threat research team has detected five malicious npm packages targeting Roblox developers, deploying malware to steal credentials and personal data.