27个版本 (15个破坏性更新)
0.16.1 | 2024年2月29日 |
---|---|
0.15.0 | 2024年2月21日 |
0.12.1 | 2023年12月20日 |
0.11.1 | 2023年11月21日 |
0.1.11 | 2021年6月17日 |
#232 in 神奇豆子
每月318次下载
用于 marine-sqlite-connector
18KB
69 行
海洋测试Rust SDK
此SDK旨在帮助针对 Marine 的开发者测试他们的Wasm模块和服务,因为 cargo test
无法运行此类模块,但进行测试是必要的。为了避免这种限制,SDK引入了 #[marine_test]
宏,它执行大部分繁重的工作,允许开发者像预期的那样使用 cargo test
。也就是说,#[marine_test]
宏根据Wasm模块和相关配置文件生成必要的代码,以调用Marine,每个测试函数一个实例,以便实际的测试函数针对Wasm模块运行,而不是本地代码。
用法
SDK的核心组件是能够封装测试函数并提供类似“原生”Rust体验的宏#[marine_test]
。被封装的函数应该接收一个特殊对象,代表模块接口。让我们看一个例子。
use marine_rs_sdk::marine;
pub fn main() {}
#[marine]
pub fn greeting(name: String) -> String {
format!("Hi, {}", name)
}
#[cfg(test)]
mod tests {
use marine_rs_sdk_test::marine_test;
#[marine_test(config_path = "../Config.toml", modules_dir = "../artifacts")]
fn test(greeting: marine_test_env::greeting::ModuleInterface) {
let actual = greeting.greeting("John".to_string());
assert_eq!(actual, "Hi, John");
}
}
这个例子展示了一个简单的模块,它有一个导出函数greeting
和一个测试。测试函数被#[marine_test]
宏封装,指定了配置文件(Config.toml
)和包含我们使用marine CLI构建命令编译项目后得到的Wasm模块的目录。这个宏生成了必要的粘合代码,以在底层实例化Marine实例并调用其中加载的greeting模块。
在设置好我们的Wasm模块和测试之后,我们可以继续使用cargo test
。
在没有Marine测试套件的设置中,greeting
函数将被编译成本地代码然后本地测试,相比之下,使用套件时,它将被编译成Wasm,加载到Marine中,然后作为Wasm模块调用。
更多详细信息请参阅Marine书籍的这一章节。
文档
存储库结构
- crates
- macro-build-rs-generator - 生成
build.rs
文件的生成器,旨在为生成的粘合代码提供IDE支持 - marine-test-macro-impl -
#[marine_test]
宏的实际实现 - marine-test-macro -
#[marine_test]
宏的proc-macro存储库
- macro-build-rs-generator - 生成
- src - 重导出所有 intend to use by end user 所需的东西
支持
如果您发现一个错误,请提交一个问题。您也可以通过Discord或Telegram联系我们。我们将尽最大努力尽快解决问题。
贡献
任何感兴趣的人都可以为项目做出贡献。请确保您阅读并遵循一些基本的规则。
许可证
所有软件代码均为(c) Fluence Labs, Inc.版权所有,根据Apache-2.0许可证。
依赖
~37–52MB
~873K SLoC