在Rust测试中记录日志

Icon Link在 Rust 测试中记录日志

Icon Link生成 Rust 测试模板

要使用 Rust 创建你自己的测试模板,请在脚本项目目录中按照以下步骤操作 cargo-generate

  1. 安装 cargo-generate
cargo install cargo-generate --locked
  1. 生成模板:
cargo generate --init fuellabs/sway templates/sway-test-rs --name sway-store

Icon Link记录日志

我们之前在 Sway 教程的介绍中涵盖了导入和设置 predicate,特别是在 Rust 测试部分 Icon Link。如果你还没有查看那个部分,我强烈建议你先去看看。

复制并粘贴下面的 Rust 测试代码:

use fuels::{
    prelude::*,
    crypto::SecretKey
};
 
abigen!(Script(
    name = "MultiSigScript",
    abi = "./out/debug/predicate-script-logging-abi.json"
));
 
#[tokio::test]
async fn script_logs() -> Result<()> {
    // WALLET
    let private_key: SecretKey =
    "0xc2620849458064e8f1eb2bc4c459f473695b443ac3134c82ddd4fd992bd138fd"
        .parse()
        .unwrap();
 
    let mut wallet: WalletUnlocked = WalletUnlocked::new_from_private_key(private_key, None);
 
    // TOKENS
 
    let all_coins = [&wallet]
        .iter()
        .flat_map(|wallet| {
            setup_single_asset_coins(wallet.address(), AssetId::default(), 10, 1_000_000)
        })
        .collect::<Vec<_>>();
 
    // PROVIDER
    let node_config = NodeConfig::default();
 
    let provider = setup_test_provider(all_coins, vec![], Some(node_config), None).await.unwrap();
 
    [&mut wallet]
        .iter_mut()
        .for_each(|wallet| {
            wallet.set_provider(provider.clone());
        });
 
    let bin_path = "./out/debug/predicate-script-logging.bin";
 
    let instance = MultiSigScript::new(wallet.clone(), bin_path);
 
    let response = instance.main().call().await?;
    
    let logs = response.decode_logs();
    println!("{:?}", logs);
    Ok(())
    // Now you have an instance of your contract you can use to test each function
}

现在,我想引起你注意的是代码的特定部分:

let bin_path = "./out/debug/predicate-script-logging.bin";
 
let instance = MultiSigScript::new(wallet.clone(), bin_path);
 
let response = instance.main().call().await?;
 
let logs = response.decode_logs();
println!("{:?}", logs);

我们现在可以调用 decode_logs 来提取我们的秘密数字,这是我们在使用 predicates 进行测试时无法做到的。

要使测试期间的打印输出出现在控制台中,你可以使用 nocapture 标志。

cargo test -- --nocapture

在开发更复杂的 predicates 时,记住这种方法是至关重要的,特别是当调试变得越来越具有挑战性时。