Categories:
Template for Aura Bot middlewares testing
Template for testing an Aura Bot middleware
Template
/* eslint-disable @typescript-eslint/no-unused-vars */
/* eslint-disable require-await */
/* eslint-disable max-classes-per-file */
import { Activity, ActivityTypes, Middleware, TestAdapter, TurnContext } from 'botbuilder';
describe('Middleare Test', () => {
describe('ChanngeMessage middleware with TurnContext', () => {
class ChangeMessage implements Middleware {
/**
* On turn function of ChangeMessage.
*
* @param {TurnContext} context context
* @param {() => Promise<void>} next next function
*/
public async onTurn(context: TurnContext, next: () => Promise<void>): Promise<void> {
context.activity.text = 'response message';
await next();
}
}
it('Testing for channgeMessage middleware', async () => {
const adapter = new TestAdapter(async (context) => {
await context.sendActivity(context.activity.text);
});
adapter.use(new ChangeMessage());
await adapter.test('request message', 'response message');
});
});
describe('ChanngeTurnState middleware with TurnContext', () => {
class ChanngeTurnState implements Middleware {
/**
* On turn function of ChangeMessage.
*
* @param {TurnContext} context context
* @param {() => Promise<void>} next next function
*/
public async onTurn(context: TurnContext, next: () => Promise<void>): Promise<void> {
context.turnState.set('testInTurnState', context.activity.text);
await next();
}
}
it('Testing for channgeTurnState middleware', async () => {
const messageToTest = 'text in message';
const adapter = new TestAdapter(async (context) => {
const testInTurnState = context.turnState.get('testInTurnState');
await context.sendActivity(testInTurnState);
});
adapter.use(new ChanngeTurnState());
await adapter.test(messageToTest, messageToTest);
});
});
describe('ChanngeActivity middleware with TurnContext', () => {
class ChanngeActivity implements Middleware {
/**
* On turn function of ChangeMessage.
*
* @param {TurnContext} context context
* @param {() => Promise<void>} next next function
*/
public async onTurn(context: TurnContext, next: () => Promise<void>): Promise<void> {
!context.activity.serviceUrl && (context.activity.serviceUrl = 'https://change-service-url.com');
await next();
}
}
it('Testing for ChanngeActivity middleware', async () => {
const sendActivity: Partial<Activity> = {
type: ActivityTypes.Message,
text: 'text in message'
};
const adapter = new TestAdapter(async (context) => {
await context.sendActivity(context.activity);
}, { serviceUrl: undefined });
adapter.use(new ChanngeActivity());
await adapter.send(sendActivity).assertReply((activity) => {
expect(activity.serviceUrl).toBe('https://change-service-url.com');
});
});
});
describe('ErrorMiddleware with TurnContext', () => {
class ErrorMiddleware implements Middleware {
/**
* On turn function of ChangeMessage.
*
* @param {TurnContext} context context
*/
public async onTurn(context: TurnContext): Promise<void> {
throw new Error(context.activity.text);
}
}
it('Testing for ErrorMiddleware', async () => {
const adapter = new TestAdapter(async () => { /* */ });
adapter.use(new ErrorMiddleware());
const messageToTest = 'text in message';
// Method1: with send/catch
await adapter.send(messageToTest)
.catch((err) => {
expect(err.message).toBe(messageToTest);
});
// Method2: with try/catch
try {
await adapter.send(messageToTest);
// Fail test if above expression doesn't throw anything.
expect(true).toBe(false);
} catch (err) {
expect(err.message).toBe(messageToTest);
}
// Method3: with expect/toThrow
await expect(async () => {
await adapter.send(messageToTest);
}).rejects.toThrow(messageToTest);
});
});
});
Last modified January 15, 2025: feat: Documentation Assistant and ATRIA for Linkin Park release #AURA-26619 [RTM] (409958c0)