Skip to content

@koishijs/plugin-mock

TIP

使用方法请参见 开发 > 单元测试 章节。

@koishijs/plugin-mock 包含了被 Koishi 使用的测试工具。它提供了一个名为 mock 的服务,可用于模拟事件上报、网络请求等等。

类:Mock

mock.webhook

用于模拟网络请求。

mock.client(userId, channelId?)

  • userId: string 用户 ID
  • channelId: string 频道 ID
  • 返回值: Client

创建一个客户端。

mock.receive(event)

  • event: Event 事件体
  • 返回值: string

触发会话事件。

mock.initUser(id, authority?, data?)

  • id: string 用户 ID
  • authority: number 权限等级
  • data: Partial<User> 其他用户数据

在数据库中初始化一个用户。等价于 database.create('user', { mock: id, authority, ...data })

mock.initChannel(id, assignee?, data?)

  • id: string 频道 ID
  • assignee: string 频道代理人
  • data: Partial<Channel> 其他频道数据

在数据库中初始化一个频道。等价于 database.create('channel', { platform: 'mock', id, assignee, ...data })

类:Client

客户端 (Client) 是对发往同一上下文的多次消息的一个抽象。它使用 mock.client() 方法创建,并借助 mock.receive() 实现其功能。

WARNING

这个类下的大部分方法的返回都基于 session.send 方法和 middleware 事件。在提供了极大方便的同时,会话也存在一些限制。如果你的插件存在以下几种特殊情况之一:

  • 使用了异步的 message 事件监听器
  • 中间件和指令中可能存在未阻塞的异步操作
  • 直接调用 Bot API 而非 session.send

这个类的方法可能会返回预料之外的结果。当然,如果要测试这些特殊情况,我们也有其他的解决方案。

client.receive(content)

  • content: string 要发送的信息
  • 返回值: Promise<string[]> 收到的回复列表

模拟发送一条消息。

client.shouldReply(content, reply?)

  • content: string 要发送给机器人的信息
  • reply: string | RegExp | (string | RegExp)[] 应有的回复,如果略去则不会进行比较
  • 返回值: Promise<void>

断言某条信息应存在某些回复。

client.shouldNotReply(content)

  • content: string 要发送给机器人的信息
  • 返回值: Promise<void>

断言某条信息不应存在任何回复。

类:Webhook

网络钩子 (Webhook) 可用于模拟到 Koishi 服务器的网络请求。

webhook.get(path, headers?)

  • path: string 请求路径
  • headers: object 请求头

模拟 GET 请求。

webhook.post(path, body, headers?)

  • path: string 请求路径
  • body: string 请求正文
  • headers: object 请求头

模拟 POST 请求。