跳转到主要内容
injective-test-tube 是一个 CosmWasm x Injective 集成测试库,与 cw-multi-test 不同,它允许你针对链的实际逻辑而不是模拟来测试你的 CosmWasm 合约。 dev 分支依赖于当前私有的仓库,但你可以使用已发布的版本。有关功能和更新信息,请参阅 CHANGELOG

入门

为了演示 injective-test-tube 的工作原理,让我们使用一个简单的示例合约:来自 cw-pluscw-whitelist 以下是如何设置测试:
现在我们有了 appchain 实例和具有一些初始余额的账户,可以与 appchain 交互。这不会运行 Docker 实例或生成外部进程,它只是将 appchain 的代码作为库加载以创建内存实例。 请注意,init_accounts 是一个便利函数,用于创建具有相同初始余额的多个账户。如果你只想创建一个账户,可以使用 init_account
现在如果我们想测试一个 cosmwasm 合约,我们需要
  • 构建 wasm 文件
  • 存储代码
  • 实例化
然后我们可以开始与我们的合约交互。让我们这样做。
请注意,在此示例中,它从 cw-plus release 加载 wasm 字节码以进行简单演示。你可能想运行 cargo wasm 并在 target/wasm32-unknown-unknown/release/<contract_name>.wasm 中找到你的 wasm 文件。
现在让我们执行合约并验证合约的状态是否正确更新。

调试

在你的合约代码中,如果你想调试,可以使用 deps.api.debug(..),它将调试消息打印到 stdout。wasmd 默认禁用此功能,但 InjectiveTestApp 允许 stdout 输出,以便你可以在运行测试时调试智能合约。

使用模块包装器

在某些情况下,你可能想直接与 appchain 逻辑交互以设置环境或查询 appchain 的状态。模块包装器提供了方便的函数来与 appchain 的模块交互。 让我们尝试与 Exchange 模块交互:
更多示例可以在 modules 目录中找到。

版本控制

injective-test-tube 的版本由其依赖项 injective 和 test-tube 的版本以及其自身的更改决定。版本以 A.B.C 格式表示,其中:
  • A 是 injective 的主版本号,
  • B 是 test-tube 的次版本号,
  • C 是 injective-test-tube 本身的补丁号。
当发布新版本的 injective 并包含破坏性更改时,我们还将发布 test-tube 的破坏性更改(如果有)并增加 injective-test-tube 的主版本号。这样,很明显新版本的 injective-test-tube 与以前的版本不向后兼容。 当向 injective-test-tube 添加向后兼容的新功能时,次版本号将增加。 当修复错误或进行其他 injective-test-tube 特定且向后兼容的更改时,补丁号将增加。 如果有破坏性更改,请查看升级指南以升级包 重要的是要注意,我们独立于依赖项的版本跟踪包的版本。
最后修改于 2026年3月30日