Saltar al contenido principal

Pruebas de Integración

Las pruebas de integración son pruebas que incluyen la integración entre componentes y, por lo tanto, prueban un ámbito más amplio como otros contratos.

El Soroban Rust SDK facilita igualmente las pruebas de integración al proporcionar utilidades para probar contra contratos reales obtenidos de mainnet, testnet o el sistema de archivos local.

Cómo Escribir Pruebas de Integración

El siguiente es un ejemplo de una prueba que incluye un contrato de dependencia en la prueba, en lugar de simularlo. La prueba está escrita para probar el [increment-with-pause contract] y el [pause contract]. El contrato tiene una función increment que aumenta el valor de un contador en uno en cada invocación. El contrato depende del contrato de pausa para controlar si la funcionalidad de incremento está pausada.

Las siguientes pruebas configuran el contrato increment-with-pause, así como importan y registran el verdadero contrato de pausa utilizando su archivo wasm.

  1. Usa el comando [stellar contract fetch] para obtener el contrato de dependencia que ya está desplegado en testnet o mainnet.

    stellar contract fetch --id C... > pause.wasm
  2. Importa el contrato en las pruebas con el macro contractimport!.

    mod pause {
    soroban_sdk::contractimport!(file = "pause.wasm");
    }
  3. Escribe una prueba similar a la siguiente que registre no solo el contrato increment-with-pause, sino también el contrato de pausa que fue importado. La prueba verifica que cuando el contrato de pausa no está pausado, el contrato de incremento funciona como se espera. Cuando está pausado, la función de incremento genera un error. Una vez que se ha reanudado, la función funciona como se espera.

    #[test]
    fn test() {
    let env = Env::default();

    let pause_id = env.register(pause::WASM, ());
    let pause_client = pause::Client::new(&env, &pause_id);

    let contract_id = env.register(
    IncrementContract,
    IncrementContractArgs::__constructor(&pause_id),
    );
    let client = IncrementContractClient::new(&env, &contract_id);

    pause_client.set(&false);
    assert_eq!(client.increment(), 1);

    pause_client.set(&true);
    assert_eq!(client.try_increment(), Err(Ok(Error::Paused)));

    pause_client.set(&false);
    assert_eq!(client.increment(), 2);
    }

La mayoría de las pruebas, sean unitarias, simulaciones o pruebas de integración, se verán muy similares a la prueba anterior. Las pruebas harán cuatro cosas:

  1. Crear un entorno, el Env.
  2. Registrar el/los contrato(s) a probar.
  3. Invocar funciones usando el cliente generado.
  4. Afirmar el resultado.