TestAdapter class

用于单元测试的测试适配器。 此适配器可用于模拟将消息从用户发送到机器人。

扩展

注解

以下示例设置测试适配器,然后执行一个简单的测试:

const { TestAdapter } = require('botbuilder');

const adapter = new TestAdapter(async (context) => {
     await context.sendActivity(`Hello World`);
});

adapter.test(`hi`, `Hello World`)
       .then(() => done());

属性

activeQueue

获取机器人的响应队列。

conversation

获取或设置对当前对话的引用。

enableTrace

获取一个值,该值指示是否发送跟踪活动。 设置是否发送跟踪活动的值。

locale

获取或设置会话的区域设置。

onTurnError

获取或设置一个错误处理程序,该处理程序可以捕获中间件或应用程序中的异常。 设置一个错误处理程序,该处理程序可以捕获中间件或应用程序中的异常。

template

Activity 模板,该模板将与发送到受测逻辑的所有活动合并。

方法

addExchangeableToken(string, string, string, string, string)

添加一个虚假的可交换令牌,以便稍后可以交换它。

addUserToken(string, string, string, string, string)

添加一个虚假的用户令牌,以便稍后可以检索它。

continueConversation(Partial<ConversationReference>, (revocableContext: TurnContext) => Promise<void>)

TestAdapter 未实现 continueConversation(),如果调用错误,则返回错误。

createConversation(string, string, string)

创建 ConversationReference。

exchangeToken(TurnContext, string, string, TokenExchangeRequest)

执行令牌交换操作,例如单一登录。

getAadTokens(TurnContext, string, string[])

使用令牌服务器注销用户。

getNextReply()

取消排队并从 activeQueue 返回下一个机器人响应。

getSignInLink(TurnContext, string)

从令牌服务器获取一个登录链接,该链接可以作为 SigninCard 的一部分发送。

getSignInResource(TurnContext, string, string, string)

获取登录资源。

getTokenStatus(TurnContext, string, string, any)

异步检索给定用户的每个已配置连接的令牌状态。 在 testAdapter 中,检索以前通过 addUserToken 添加的令牌。

getUserToken(TurnContext, string, string)

检索登录流中的用户的 OAuth 令牌。

makeActivity(string)

从文本和当前对话上下文创建消息活动。

processActivity(string | Partial<Activity>, (context: TurnContext) => Promise<any>)

接收一个活动,并通过中间件管道运行它。

send(string | Partial<Activity>)

向机器人发送内容。 这会返回一个新的 TestFlow 实例,该实例可用于添加用于检查机器人回复,然后发送其他活动的其他步骤。

sendTextToBot(string, (context: TurnContext) => Promise<any>)

处理用户的消息活动。

signOutUser(TurnContext, string, string)

使用令牌服务器注销用户。

test(string | Partial<Activity>, string | Partial<Activity> | (activity: Partial<Activity>, description?: string) => void, string, number)

向机器人发送某些内容,并期望机器人使用给定的答复返回。

testActivities(Partial<Activity>[], string, number)

测试活动列表。

throwOnExchangeRequest(string, string, string, string)

添加一个指令,用于在交换请求期间引发异常。

构造函数详细信息

TestAdapter((context: TurnContext) => Promise<void> | ConversationReference, Partial<Activity>, boolean)

创建新的 TestAdapter 实例。

new TestAdapter(logicOrConversation?: (context: TurnContext) => Promise<void> | ConversationReference, template?: Partial<Activity>, sendTraceActivity?: boolean)

参数

logicOrConversation

(context: TurnContext) => Promise<void> | ConversationReference

正在测试的机器人逻辑。

template

Partial<Activity>

(可选)活动,包含要分配给接收的所有测试消息的默认值。

sendTraceActivity

boolean

指示适配器是否应将其队列添加到机器人生成的任何跟踪活动。

属性详细信息

activeQueue

获取机器人的响应队列。

activeQueue: Partial<Activity>[]

属性值

Partial<Activity>[]

conversation

获取或设置对当前对话的引用。

conversation: ConversationReference

属性值

ConversationReference

enableTrace

获取一个值,该值指示是否发送跟踪活动。 设置是否发送跟踪活动的值。

boolean enableTrace

属性值

boolean

一个值,该值指示是否发送跟踪活动。

locale

获取或设置会话的区域设置。

locale: string

属性值

string

onTurnError

获取或设置一个错误处理程序,该处理程序可以捕获中间件或应用程序中的异常。 设置一个错误处理程序,该处理程序可以捕获中间件或应用程序中的异常。

(context: TurnContext, error: Error) => Promise<void> onTurnError

属性值

(context: TurnContext, error: Error) => Promise<void>

表示异步操作的 promise。

注解

使用以下参数调用错误处理程序:

名字 类型 描述
context TurnContext 轮次的上下文对象。
error Error 引发 Node.js 错误。

template

Activity 模板,该模板将与发送到受测逻辑的所有活动合并。

template: Partial<Activity>

属性值

Partial<Activity>

继承属性详细信息

BotIdentityKey

BotIdentityKey: symbol

属性值

symbol

继承自BotAdapter.BotIdentityKey

ConnectorClientKey

ConnectorClientKey: symbol

属性值

symbol

继承自BotAdapter.ConnectorClientKey

OAuthScopeKey

OAuthScopeKey: symbol

属性值

symbol

继承自BotAdapter.OAuthScopeKey

方法详细信息

addExchangeableToken(string, string, string, string, string)

添加一个虚假的可交换令牌,以便稍后可以交换它。

function addExchangeableToken(connectionName: string, channelId: string, userId: string, exchangeableItem: string, token: string)

参数

connectionName

string

要使用的身份验证连接的名称。

channelId

string

通道 ID。

userId

string

用户 ID。

exchangeableItem

string

可交换令牌或资源 URI。

token

string

要存储的令牌。

addUserToken(string, string, string, string, string)

添加一个虚假的用户令牌,以便稍后可以检索它。

function addUserToken(connectionName: string, channelId: string, userId: string, token: string, magicCode?: string)

参数

connectionName

string

连接名称。

channelId

string

通道 ID。

userId

string

用户 ID。

token

string

要存储的令牌。

magicCode

string

(可选)要与此令牌关联的可选 magic 代码。

continueConversation(Partial<ConversationReference>, (revocableContext: TurnContext) => Promise<void>)

TestAdapter 未实现 continueConversation(),如果调用错误,则返回错误。

function continueConversation(_reference: Partial<ConversationReference>, _logic: (revocableContext: TurnContext) => Promise<void>): Promise<void>

参数

_reference

Partial<ConversationReference>

要继续的对对话的引用。

_logic

(revocableContext: TurnContext) => Promise<void>

在适配器中间件运行后调用的异步方法。

返回

Promise<void>

表示异步操作的 promise。

createConversation(string, string, string)

创建 ConversationReference。

static function createConversation(name: string, user?: string, bot?: string): ConversationReference

参数

name

string

对话的名称(也 ID)。

user

string

用户名称(也 ID)默认值:User1。

bot

string

机器人的名称(也 ID)默认值:机器人。

返回

ConversationReference

ConversationReference

exchangeToken(TurnContext, string, string, TokenExchangeRequest)

执行令牌交换操作,例如单一登录。

function exchangeToken(context: TurnContext, connectionName: string, userId: string, tokenExchangeRequest: TokenExchangeRequest): Promise<TokenResponse>

参数

context
TurnContext

(xref:botbuilder-core。用于与用户的当前对话轮次的 TurnContext。

connectionName

string

要使用的身份验证连接的名称。

userId

string

与令牌关联的用户 ID。

tokenExchangeRequest

TokenExchangeRequest

交换请求详细信息,可以是要交换的令牌,要么是交换的 URI。

返回

Promise<TokenResponse>

如果承诺完成,则返回交换的令牌。

getAadTokens(TurnContext, string, string[])

使用令牌服务器注销用户。

function getAadTokens(_context: TurnContext, _connectionName: string, _resourceUrls: string[]): Promise<[key: string]: TokenResponse>

参数

_context
TurnContext

与用户的当前会话轮次的上下文。

_connectionName

string

要使用的身份验证连接的名称。

_resourceUrls

string[]

要为其检索令牌的资源 URL 列表。

返回

Promise<[key: string]: TokenResponse>

resourceUrl 字典,指向相应的 TokenResponse。

getNextReply()

取消排队并从 activeQueue 返回下一个机器人响应。

function getNextReply(): Partial<Activity>

返回

Partial<Activity>

队列中的下一个活动;或未定义,如果队列为空。

从令牌服务器获取一个登录链接,该链接可以作为 SigninCard 的一部分发送。

function getSignInLink(context: TurnContext, connectionName: string): Promise<string>

参数

context
TurnContext

与用户的当前会话轮次的上下文。

connectionName

string

要使用的身份验证连接的名称。

返回

Promise<string>

令牌服务器的登录链接,可以作为 SigninCard 的一部分发送。

getSignInResource(TurnContext, string, string, string)

获取登录资源。

function getSignInResource(context: TurnContext, connectionName: string, userId?: string, _finalRedirect?: string): Promise<SignInUrlResponse>

参数

context
TurnContext

(xref:botbuilder-core。用于与用户的当前对话轮次的 TurnContext。

connectionName

string

要使用的身份验证连接的名称。

userId

string

用户 ID

_finalRedirect

string

最终重定向 URL。

返回

Promise<SignInUrlResponse>

具有新 Promise 对象的

getTokenStatus(TurnContext, string, string, any)

异步检索给定用户的每个已配置连接的令牌状态。 在 testAdapter 中,检索以前通过 addUserToken 添加的令牌。

function getTokenStatus(context: TurnContext, userId: string, includeFilter?: string, _oAuthAppCredentials?: any): Promise<any[]>

参数

context
TurnContext

轮次的上下文对象。

userId

string

要为其检索令牌状态的用户的 ID。

includeFilter

string

自选。 要包含的连接的逗号分隔列表。 如果存在,则 includeFilter 参数会限制此方法返回的标记。

_oAuthAppCredentials

any

适用于 OAuth 的 AppCredentials。

返回

Promise<any[]>

检索到的 TokenStatus 对象。

getUserToken(TurnContext, string, string)

检索登录流中的用户的 OAuth 令牌。

function getUserToken(context: TurnContext, connectionName: string, magicCode?: string): Promise<TokenResponse>

参数

context
TurnContext

与用户的当前会话轮次的上下文。

connectionName

string

要使用的身份验证连接的名称。

magicCode

string

(可选)可选用户输入代码进行验证。

返回

Promise<TokenResponse>

登录流中的用户的 OAuth 令牌。

makeActivity(string)

从文本和当前对话上下文创建消息活动。

function makeActivity(text?: string): Partial<Activity>

参数

text

string

消息文本。

返回

Partial<Activity>

适当的消息活动。

processActivity(string | Partial<Activity>, (context: TurnContext) => Promise<any>)

接收一个活动,并通过中间件管道运行它。

function processActivity(activity: string | Partial<Activity>, callback?: (context: TurnContext) => Promise<any>): Promise<any>

参数

activity

string | Partial<Activity>

要处理的活动。

callback

(context: TurnContext) => Promise<any>

要调用的机器人逻辑。

返回

Promise<any>

表示异步操作的 promise。

send(string | Partial<Activity>)

向机器人发送内容。 这会返回一个新的 TestFlow 实例,该实例可用于添加用于检查机器人回复,然后发送其他活动的其他步骤。

function send(userSays: string | Partial<Activity>): TestFlow

参数

userSays

string | Partial<Activity>

模拟用户输入的文本或活动。

返回

新的 TestFlow 实例,可用于添加用于检查机器人答复,然后发送其他活动的其他步骤。

注解

此示例演示如何发送消息,然后验证响应是否按预期方式:

adapter.send('hi')
       .assertReply('Hello World')
       .then(() => done());

sendTextToBot(string, (context: TurnContext) => Promise<any>)

处理用户的消息活动。

function sendTextToBot(userSays: string, callback: (context: TurnContext) => Promise<any>): Promise<any>

参数

userSays

string

用户消息的文本。

callback

(context: TurnContext) => Promise<any>

要调用的机器人逻辑。

返回

Promise<any>

表示异步操作的 promise。

signOutUser(TurnContext, string, string)

使用令牌服务器注销用户。

function signOutUser(context: TurnContext, connectionName?: string, userId?: string): Promise<void>

参数

context
TurnContext

与用户的当前会话轮次的上下文。

connectionName

string

要使用的身份验证连接的名称。

userId

string

要注销的用户 ID。

返回

Promise<void>

test(string | Partial<Activity>, string | Partial<Activity> | (activity: Partial<Activity>, description?: string) => void, string, number)

向机器人发送某些内容,并期望机器人使用给定的答复返回。

function test(userSays: string | Partial<Activity>, expected: string | Partial<Activity> | (activity: Partial<Activity>, description?: string) => void, description?: string, _timeout?: number): TestFlow

参数

userSays

string | Partial<Activity>

模拟用户输入的文本或活动。

expected

string | Partial<Activity> | (activity: Partial<Activity>, description?: string) => void

机器人发送的答复的预期文本或活动。

description

string

(可选)测试用例的说明。 如果未提供,将生成一个。

_timeout

number

(可选)等待机器人响应的毫秒数。 默认值为 3000

返回

一个新的 TestFlow 对象,该对象将此交换追加到建模的交换中。

注解

这只是对 send()assertReply()调用的包装器。 这是帮助程序提供的常见模式。

adapter.test('hi', 'Hello World')
       .then(() => done());

testActivities(Partial<Activity>[], string, number)

测试活动列表。

function testActivities(activities: Partial<Activity>[], description?: string, timeout?: number): TestFlow

参数

activities

Partial<Activity>[]

活动数组。

description

string

(可选)测试用例的说明。 如果未提供,将生成一个。

timeout

number

(可选)等待机器人响应的毫秒数。 默认值为 3000

返回

一个新的 TestFlow 对象,该对象将此交换追加到建模的交换中。

注解

具有“机器人”角色的每个活动都将使用 assertReply()进行处理,所有其他活动都将作为发送的用户消息进行处理。

throwOnExchangeRequest(string, string, string, string)

添加一个指令,用于在交换请求期间引发异常。

function throwOnExchangeRequest(connectionName: string, channelId: string, userId: string, exchangeableItem: string)

参数

connectionName

string

连接名称。

channelId

string

通道 ID。

userId

string

用户 ID。

exchangeableItem

string

可交换令牌或资源 URI。

继承的方法详细信息

continueConversationAsync(ClaimsIdentity, Partial<ConversationReference>, (context: TurnContext) => Promise<void>)

异步恢复与用户的对话,可能经过一段时间之后。

function continueConversationAsync(claimsIdentity: ClaimsIdentity, reference: Partial<ConversationReference>, logic: (context: TurnContext) => Promise<void>): Promise<void>

参数

claimsIdentity

ClaimsIdentity

会话 ClaimsIdentity

reference

Partial<ConversationReference>

对话 部分 对话继续。

logic

(context: TurnContext) => Promise<void>

在适配器中间件运行后调用的异步方法。

返回

Promise<void>

表示异步操作的 promise

继承自BotAdapter.continueConversationAsync

continueConversationAsync(ClaimsIdentity, Partial<ConversationReference>, string, (context: TurnContext) => Promise<void>)

异步恢复与用户的对话,可能经过一段时间之后。

function continueConversationAsync(claimsIdentity: ClaimsIdentity, reference: Partial<ConversationReference>, audience: string, logic: (context: TurnContext) => Promise<void>): Promise<void>

参数

claimsIdentity

ClaimsIdentity

会话 ClaimsIdentity

reference

Partial<ConversationReference>

对话 部分 对话继续。

audience

string

表示主动消息收件人的值。</param>

logic

(context: TurnContext) => Promise<void>

在适配器中间件运行后调用的异步方法。

返回

Promise<void>

表示异步操作的 promise

继承自BotAdapter.continueConversationAsync

continueConversationAsync(string, Partial<ConversationReference>, (context: TurnContext) => Promise<void>)

异步恢复与用户的对话,可能经过一段时间之后。

function continueConversationAsync(botAppId: string, reference: Partial<ConversationReference>, logic: (context: TurnContext) => Promise<void>): Promise<void>

参数

botAppId

string

机器人的应用程序 ID。 在适配器(控制台、测试等)的单租户中忽略此参数,但对于多租户感知的 BotFrameworkAdapter 至关重要。

reference

Partial<ConversationReference>

对话 部分 对话继续。

logic

(context: TurnContext) => Promise<void>

在适配器中间件运行后调用的异步方法。

返回

Promise<void>

表示异步操作的 promise

继承自BotAdapter.continueConversationAsync

createConversationAsync(string, string, string, string, ConversationParameters, (context: TurnContext) => Promise<void>)

在指定的通道上创建对话。

function createConversationAsync(_botAppId: string, _channelId: string, _serviceUrl: string, _audience: string, _conversationParameters: ConversationParameters, _logic: (context: TurnContext) => Promise<void>): Promise<void>

参数

_botAppId

string

机器人的应用程序 ID。

_channelId

string

通道的 ID。

_serviceUrl

string

通道的 ID。

_audience

string

连接器的受众。

<param name=“conversationParameters”>
_conversationParameters

ConversationParameters

用于创建对话的对话信息

_logic

(context: TurnContext) => Promise<void>

调用生成的机器人轮次的方法。

返回

Promise<void>

表示异步操作的承诺

注解

若要开始对话,机器人必须知道其帐户信息和该通道上的用户帐户信息。 大多数_channels仅支持启动直接消息(非组)对话。

适配器尝试在通道上创建新会话,然后通过其中间件管道向逻辑方法发送 conversationUpdate 活动。

如果与指定用户建立对话,活动的会话 ID 将包含新会话的 ID。

继承自BotAdapter.createConversationAsync

use((context: TurnContext, next: () => Promise<void>) => Promise<void> | Middleware[])

将中间件添加到适配器的管道。

function use(middlewares: (context: TurnContext, next: () => Promise<void>) => Promise<void> | Middleware[]): this

参数

middlewares

(context: TurnContext, next: () => Promise<void>) => Promise<void> | Middleware[]

要添加的中间件或中间件处理程序。

返回

this

更新的适配器对象。

注解

中间件在初始化时添加到适配器。 每个轮次,适配器都会按照添加中间件的顺序调用其中间件。

继承自BotAdapter.use