Slack api fixtures for testing
npm install @slack-wrench/fixturesThis package contains type-safe fixtures and application wrappers for testing slack applications.
- Install
- Usage
- Events
- Messages
- Slash Commands
- Actions
- Block Button Action
- View Submit Action
- Global Fields
- Overriding
- Serverless Tester
- Send Slack Events
- Send HTTP Requests
``bash`
yarn add --dev @slack-wrench/fixturesor
npm install --save-dev @slack-wrench/fixtures
Currently, we only support a subset of Slack's Event's API. We're implementing them as we need them and hope to have others do the same.
`typescript`
import { events } from '@slack-wrench/fixtures';
#### Messages
`typescript`
events.message(
text: string,
options: Partial
)
// : MessageEvent => { text, user, ts, ... }
Creates a message event.
Arguments:
- text: Text sent in the messageoptions
- : Any MessageEvent fields to override from default.
Returns:
Object containing a message event
`typescript
import { slashCommand } from '@slack-wrench/fixtures';
slashCommand(
command: string,
options?: Partial
)
// : SlashCommand => { command, user_id, team_id, ... }
`
Creates a slash command event.
Example:
`typescript`
// sending a text field
slashCommand('/command', { text: 'I just used a command!' });
Arguments:
- command: command nameoptions
- : Any SlashCommand fields to override from default.
Returns:
Object containing a Slash Command event
`typescript`
import { actions } from '@slack-wrench/fixtures';
#### Block Button Action
`typescript`
actions.blockButtonAction(
action?: Partial
options?: Partial
)
// : BlockButtonAction => { type: 'block_actions', actions: [ { type: 'button', ...} ], user, ... }
Creates an event from a block button action.
Arguments:
- action: Overrides to ButtonAction values (normally a subset of { action_id, block_id, value }options
- : Any fields to override on the default BlockAction event
Returns:
Object containing a block action event
#### View Submit Action
`typescript`
view.viewSubmitAction(
view?: Partial
options?: Partial
)
// : ViewSubmitAction => { type: 'view_submission', view: { id: 'editView', state: {}, ...} ], user, ... }
Creates an event from a view submit action.
Arguments:
- view: Overrides to ViewOutput values, on ViewSubmitAction.viewoptions
- : Any fields to override on the default ViewSubmitAction event
Returns:
Object containing a view submit action event
`typescript`
import { fields } from '@slack-wrench/fixtures';
The fields returned for all of the fixtures are set and accessible through fields . This can be really helpful when writing tests. It also enables you to change the fields if you need them to be specific.
All of the fields used by fixtures can be overridden globally. This might be helpful if you need something like the team domain and id to be specific for your app.
`typescript
// Here are a few examples of things you can change. This will affect all fixtures.
// Update the team id
fields.team.id = 'TANOTHERTEAM';
fields.team.domain = 'another-team';
// or as an object
fields.team = {
id: 'TANOTHERTEAM',
domain: 'another-team',
};
// Update the callback_id
fields.callback_id = 'FancyCallbackId';
`
If you want to reset the fields to their original values, you can call reset. This is potentially helpful in testing hooks.
`typescript`
beforeEach(() => {
fields.reset();
});
`typescript`
import { ServerlessTester } from '@slack-wrench/fixtures';
A helper class for testing root level applications exposing slack endpoints.
`typescript
import { ServerlessTester } from '@slack-wrench/fixtures';
import { App, ExpressReceiver } from '@slack/bolt';
const receiver = new ExpressReceiver({ signingSecret, endpoints });
const app = new App({ receiver, token });
handler = new ServerlessTester(receiver.app, signingSecret);
`
Arguments:
- application: App to test, supports any framework that serverless-http does eg: Express and KoasigningSecret
- : Secret to sign all requests with, this should be the same string your application uses to verify requests.
Use handler.sendSlackEvent to send Slack fixture events to your application.
`typescript`
const result = await handler.sendSlackEvent(slashCommand(command));
expect(result.statusCode).toEqual(200);
Arguments:
- event: Fixture/Slack event to simulate.path
- : a path to POST the event to, defaults to /slack/events, Bolt's default.
Use handler.sendHttp to send any http event to your application.
`typescript`
const result = await handler.sendHttp({
body: 'How are you?',
httpMethod: 'GET',
path: '/',
});
expect(result.statusCode).toEqual(200);
Arguments:
- event: Request event to simulate.path
- : a path to POST the event to, defaults to /slack/events`, Bolt's default.