【问题标题】:How to capture NEAR samart contract logs (env::log)?如何捕获 NEAR 智能合约日志(env::log)?
【发布时间】:2021-01-12 13:06:21
【问题描述】:

我想在 NEAR Rust 智能合约测试运行时(不是终端)中捕获日志(env::log)并检查输出(在测试函数中)。我该怎么做?

【问题讨论】:

  • 已经有一段时间了,但我不这么认为,但这里有几个想法: 1. 记住在运行测试时添加愚蠢的额外标志,这样测试就不会“捕获”输出cargo test -- --nocapture 2. 你可以在单元测试中使用println!,它们肯定会出现(如果你使用上面的标志) 3. 如果这是更深层次的东西,你真的需要看到env::logs,我认为单元测试不是最好的方法,你会想要使用模拟测试。 docs.near.org/docs/roles/developer/contracts/…
  • 谢谢,我正在更新文本。我想在测试运行时而不是在终端中捕获它。

标签: rust nearprotocol


【解决方案1】:

此功能尚未发布。这是将其介绍给near_sdk https://github.com/near/near-sdk-rs/pull/229 的PR。假设它提供了足够的可见性,也许您可​​以直接获取执行此操作的代码。

/// Returns a copy of logs from VMLogic. Only available in unit tests.
pub fn get_logs() -> Vec<String> {
    let blockchain_interface =
        env::take_blockchain_interface().expect("Blockchain interface is not set");
    let logs = blockchain_interface
        .as_mocked_blockchain()
        .expect("MockedBlockchain interface expected")
        .logs();
    env::set_blockchain_interface(blockchain_interface);
    logs
}

【讨论】:

    猜你喜欢
    • 2021-06-14
    • 2021-12-30
    • 2022-06-22
    • 2022-06-23
    • 2021-01-15
    • 2021-03-31
    • 1970-01-01
    • 1970-01-01
    • 2021-08-18
    相关资源
    最近更新 更多