【问题标题】:How can I set a caller in ink! contract unit testing function?如何在墨水中设置调用者!合约单元测试功能?
【发布时间】:2021-11-03 17:14:29
【问题描述】:
fn do_check(&mut self) -> Result<()> {
    let caller = self.env().caller();
    ...
}

我正在为do_check 函数编写一个测试函数。在这里,我想设置一个调用者,但不知道该怎么做。

#[cfg(test)]
mod tests {
    use super::*;
    use ink_lang as ink;

    #[ink::test]
    fn do_check_works() {
        let mut test = Test::new();
        // here I want to set a caller for calling do_check
        test.do_check();
        ...

【问题讨论】:

    标签: unit-testing rust substrate rust-ink


    【解决方案1】:

    您可以使用来自ink_envset_caller 设置调用方:

    let account = AccountId::from([0x1; 32]);
    ink_env::test::set_caller::<ink_env::DefaultEnvironment>(account);
    

    编辑:目前,您需要实验性单元测试引擎。在您的测试模组上方添加:

    #[cfg(feature = "ink-experimental-engine")]

    并在你的 toml 文件中添加依赖:

    ink-experimental-engine = ["ink_env/ink-experimental-engine"]

    有关更多详细信息,请参阅墨水存储库中的 examples

    【讨论】:

    • ink_env::test::set_caller::<:defaultenvironment>(bob); | ^^^^^^^^^^ 未在ink_env::test中找到
    • 在 ink_env::test 中找不到 set_caller
    • 您需要使用实验性单元测试引擎。在你的测试上面添加这个mod:#[cfg(feature = "ink-experimental-engine")]。并在您的toml 文件中添加依赖项:ink-experimental-engine = ["ink_env/ink-experimental-engine"]
    • 谢谢,它有效。
    猜你喜欢
    • 2022-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-03
    • 1970-01-01
    • 1970-01-01
    • 2022-01-10
    相关资源
    最近更新 更多