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
更多关于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}');
}
}