Flutter事件存储管理插件eventstore_client_test的使用

Flutter事件存储管理插件eventstore_client_test的使用

使用

一个简单的使用示例,用于测试基于事件存储的应用程序:

import 'package:eventstore_client/eventstore_client.dart';
import 'package:eventstore_client_test/eventstore_client_test.dart';
import 'package:test/test.dart';

void main() {
  // 可重用的测试资源
  late EventStoreStreamsClient client;
  late EventStoreServerSingleNode server;

  setUpAll(() {
    server = EventStoreServerSingleNode();
    client = EventStoreStreamsClient(
      EventStoreClientSettings.parse('esdb://127.0.0.1:2113'),
    );
    return server.start();
  });

  tearDownAll(() async {
    await client.shutdown();
    await server.stop();
  });

  test('测试应用', () {
    // TODO: 使用client添加测试
  });
}

如果你想要运行一个应用程序来测试本地运行的独立EventStoreDB实例,可以使用此包提供的命令行工具esdbtcli。在使用之前,你需要激活它:

dart pub global activate eventstore_client_test 

更多信息可以在命令行中通过以下方式获取:

esdbtcli -h

命令行工具 esdbtcli 说明

这是一个用于本地测试EventStoreDB的命令行工具。

使用方法:

esdbtcli <command> [arguments]

全局选项:

  • -h, --help: 打印使用信息。
  • -v, --[no-]verbose: 输出更多信息。

可用命令:

  • certs: 生成EventStoreDB所需的自签名证书。
  • start: 在docker中启动单个EventStoreDB实例。
  • stop: 停止单个在docker中运行的EventStoreDB实例。

可以通过以下方式获取更多关于特定命令的信息:

esdbtcli help <command>

注意事项

所有与EventStoreDB实例相关的测试工具都假定你的机器上已安装了docker。

特性与问题

请在以下链接提交功能请求和错误报告:


示例代码

下面是一个完整的示例代码,展示如何使用eventstore_client_test插件进行测试。

import 'package:eventstore_client/eventstore_client.dart';
import 'package:eventstore_client_test/eventstore_client_test.dart';
import 'package:test/test.dart';

void main() {
  // 可重用的测试资源
  late EventStoreStreamsClient client;
  late EventStoreServerSingleNode server;

  setUpAll(() {
    // 启动EventStoreDB服务器
    server = EventStoreServerSingleNode(EventStoreImage.LTS);
    client = EventStoreStreamsClient(
      EventStoreClientSettings.parse('esdb://127.0.0.1:2113'),
    );
    return server.start();
  });

  tearDownAll(() async {
    // 关闭客户端并停止服务器
    await client.shutdown();
    await server.stop();
  });

  test('测试客户端', () {
    // TODO: 使用client添加测试
  });
}

更多关于Flutter事件存储管理插件eventstore_client_test的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter事件存储管理插件eventstore_client_test的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


eventstore_client_test 是一个用于测试 EventStoreDB 的 Flutter 插件。它允许你在 Flutter 应用中与 EventStoreDB 进行交互,特别是在测试环境中。EventStoreDB 是一个事件源数据库,专门用于存储和检索事件流。

安装插件

首先,你需要在 pubspec.yaml 文件中添加 eventstore_client_test 插件的依赖:

dependencies:
  eventstore_client_test: ^0.1.0  # 请使用最新版本

然后运行 flutter pub get 来安装依赖。

基本使用

以下是一个简单的示例,展示如何使用 eventstore_client_test 插件与 EventStoreDB 进行交互。

1. 导入库

import 'package:eventstore_client_test/eventstore_client_test.dart';

2. 连接到 EventStoreDB

void main() async {
  // 创建 EventStoreDB 客户端
  final client = EventStoreClient(
    EventStoreClientSettings(
      connectionString: 'esdb://localhost:2113?tls=false', // 你的 EventStoreDB 地址
    ),
  );

  // 连接到 EventStoreDB
  await client.connect();
}

3. 写入事件

void writeEvent() async {
  final event = EventData(
    eventId: Uuid().v4(),
    eventType: 'TestEvent',
    data: '{"message": "Hello, EventStoreDB!"}',
    metadata: '{"user": "testUser"}',
  );

  await client.appendToStream(
    'test-stream', // 流名称
    [event], // 事件列表
  );
}

4. 读取事件

void readEvents() async {
  final streamEvents = await client.readStreamEventsForward(
    'test-stream', // 流名称
    startPosition: StreamPosition.start, // 从流的开始位置读取
  );

  for (final resolvedEvent in streamEvents) {
    print('Event: ${resolvedEvent.event.data}');
  }
}

5. 关闭连接

void closeConnection() async {
  await client.dispose();
}

完整示例

import 'package:eventstore_client_test/eventstore_client_test.dart';
import 'package:uuid/uuid.dart';

void main() async {
  // 创建 EventStoreDB 客户端
  final client = EventStoreClient(
    EventStoreClientSettings(
      connectionString: 'esdb://localhost:2113?tls=false', // 你的 EventStoreDB 地址
    ),
  );

  // 连接到 EventStoreDB
  await client.connect();

  // 写入事件
  await writeEvent(client);

  // 读取事件
  await readEvents(client);

  // 关闭连接
  await client.dispose();
}

Future<void> writeEvent(EventStoreClient client) async {
  final event = EventData(
    eventId: Uuid().v4(),
    eventType: 'TestEvent',
    data: '{"message": "Hello, EventStoreDB!"}',
    metadata: '{"user": "testUser"}',
  );

  await client.appendToStream(
    'test-stream', // 流名称
    [event], // 事件列表
  );
}

Future<void> readEvents(EventStoreClient client) async {
  final streamEvents = await client.readStreamEventsForward(
    'test-stream', // 流名称
    startPosition: StreamPosition.start, // 从流的开始位置读取
  );

  for (final resolvedEvent in streamEvents) {
    print('Event: ${resolvedEvent.event.data}');
  }
}
回到顶部