Тестирование контрактов CosmWasm

Тестирование модуля

Для проведения теста добавьте строчку:

#[cfg(test)]
mod tests { ...
}

Для запуска теста необходимо набрать команду:

cargo test 

Справочник по Cosmwasm https://docs.cosmwasm.com/tutorials/simple-option/testing/arrow-up-right

Пример простого контракта и его тестирования https://github.com/InterWasm/cw-contracts/blob/main/contracts/simple-option/src/contract.rsarrow-up-right

Интеграционный тест

Пакет cw-multi-test позволяет проводить интеграционные тесты (https://docs.rs/cw-multi-test/latest/cw_multi_test/arrow-up-right)

Необходимо выполнить следующие шаги:

1) Инициировать тестовую установку пакета. Ниже мы приводим пример с использованием instantiate_contract()и дальнейшей работой с execute_contract() соответственно:

fn setup_test(
    app: &mut App<
        BankKeeper,
        MockApi,
        MockStorage,
        SeiModule,
        WasmKeeper<SeiMsg, SeiQueryWrapper>,
        FailingStaking,
        FailingDistribution,
    >,
) -> (Addr, Addr) {
    let example_contract_code = app.store_code(Box::new(
        ContractWrapper::new(
            example_crate::contract::execute,
            example_crate::contract::instantiate,
            example_crate::contract::query,
        )
        .with_reply(example_crate::contract::reply),
    ));

    let example_contract_addr = app
        .instantiate_contract(
            example_contract_code,
            Addr::unchecked(ADMIN),
            &example_crate::msg::InstantiateMsg {
                example_param: Uint64::new(100),
            },
            &[],
            "example",
            Some(ADMIN.to_string()),
        )
        .unwrap();

    app.execute_contract(
        Addr::unchecked(ADMIN),
        example_contract_addr.clone(),
        &ExampleExecuteMsg::ExampleCall {
            asset_denom: "usei".to_string(),
        },
        &[],
    )
    .unwrap();

    example_contract_addr
}

2) Провести интеграционный тест:

Ссылка на документацию Cosmwasm https://docs.cosmwasm.com/docs/1.0/smart-contracts/testing/arrow-up-right

Сквозное тестирование в блокчейне Sei

Для проведения сквозного тестирования вам необходимо вновь выполнить следующие шаги:

1) запустите блокчейн на локальной машине или в сети разработчиков (devnet) https://docs.seinetwork.io/smart-contracts-and-local-development/set-up-a-local-networkarrow-up-right

2) задеплойте свой контракт https://docs.seinetwork.io/smart-contracts-and-local-development/deploy-a-generic-contractarrow-up-right

Пример контракта, который может быть использован для локального тестирования можно посмотреть здесь https://github.com/sei-protocol/sei-cosmwasmarrow-up-right

Для получения отладочной информации, такой как ошибочный ордер, вы можете использовать набор инструментов на стороне ПО по созданию контракта. Компилятор Rust может выводить ошибки во время компиляции. Также для любой структуры, для которой реализована функция отладки, можно использовать println! Наконец, вы можете добавить логи в deps.api.debug(err).

Last updated