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 神奇豆子

Download history 119/week @ 2024-04-08 80/week @ 2024-04-15 100/week @ 2024-04-22 26/week @ 2024-04-29 74/week @ 2024-05-06 280/week @ 2024-05-13 237/week @ 2024-05-20 164/week @ 2024-05-27 174/week @ 2024-06-03 115/week @ 2024-06-10 58/week @ 2024-06-17 23/week @ 2024-06-24 77/week @ 2024-07-01 63/week @ 2024-07-08 67/week @ 2024-07-15 110/week @ 2024-07-22

每月318次下载
用于 marine-sqlite-connector

Apache-2.0

18KB
69

海洋测试Rust SDK

crates.io version

此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书籍的这一章节

文档

存储库结构

支持

如果您发现一个错误,请提交一个问题。您也可以通过DiscordTelegram联系我们。我们将尽最大努力尽快解决问题。

贡献

任何感兴趣的人都可以为项目做出贡献。请确保您阅读并遵循一些基本的规则

许可证

所有软件代码均为(c) Fluence Labs, Inc.版权所有,根据Apache-2.0许可证。

依赖

~37–52MB
~873K SLoC