Depuración simple durante las pruebas

Soy nuevo en solidez y me gustaría tener un poco de depuración.

este es mi ejemplo simple (estoy usando web3 1.0)

Tengo una función simple en mi contrato.

function bar(address _address_usr) public  {
        uint res = 5;
        emit foo('test',res);       
    }

Y tengo prueba al respecto.

.....
it("...", async () => {

        let livello = await instance.methods.bar(accounts[0]).call();


        instance.events.foo(function (error, event) {
            console.log(event);
        })
            .on('data', function (event) {
                console.log("OK");
                console.log(event); 
            })
            .on('changed', function (event) {
                console.log("OK");
            })
            .on('error', console.error);    

    });
....

Me gustaría saber el resultado de res. Probé con event pero tengo este error

err Error: The current provider doesn't support subscriptions: HttpProvider

¿Puedo imprimir algún resultado/var en mi consola como console.log o algo así?

Gracias

ACTUALIZAR

Mi distancia web3

ayudantes.js

const Web3 = require("web3") // import web3 v1.0 constructor

// use globally injected web3 to find the currentProvider and wrap with web3 v1.0
const getWeb3 = () => {
    const myWeb3 = new Web3(web3.currentProvider)
    return myWeb3
}

// assumes passed-in web3 is v1.0 and creates a function to receive contract name
const getContractInstance = (web3) => (contractName) => {
    const artifact = artifacts.require(contractName) // globally injected artifacts helper
    const deployedAddress = artifact.networks[artifact.network_id].address
    const instance = new web3.eth.Contract(artifact.abi, deployedAddress)
    return instance
}

module.exports = { getWeb3, getContractInstance }

mi prueba.js

const {getWeb3, getContractInstance} = require("./helpers")
const web3 = getWeb3()
const getInstance = getContractInstance(web3)
Recomiendo ver cómo Open Zeppelin implementa las pruebas, tienen funciones de ayuda para analizar eventos, github.com/OpenZeppelin/openzeppelin-solidity/blob/master/test/… , pero sinceramente extraño la forma antigua en que hacían las cosas: P.
Intente compartir el código donde crea la instancia web3, creo que podría estar usando la funcionalidad websocket y ahí es donde está fallando, para detectar el error, intente capturar al generar la instancia, para solucionar el problema no use ws, o use un nodo compatible con web socket
@EnriqueAlcazar Actualicé mi pregunta. ¿La única forma de leer la variable dentro de mi código son los eventos?
Si desea depurar, puede usar remix, tienen un depurador bastante bueno, también recuerde que puede usar cadenas como un segundo parámetro para sus reversiones, y puede crear funciones constantes (vistas) para leer cualquier parámetro en su cadena de bloques
Verifique que web3 que está utilizando sea correcto, IE: console.regístrelo y observe si los parámetros son correctos

Respuestas (1)

Su error indica que está utilizando HttpProviderpara web3 y según la documentación de web3 aquí , dice:

Objeto - HttpProvider: el proveedor HTTP está obsoleto, ya que no funcionará para las suscripciones.

y este error aparece en este código :

// throw error, if provider doesnt support subscriptions
    if(!this.options.requestManager.provider.on) {
        var err2 = new Error('The current provider doesn\'t support subscriptions: '+ this.options.requestManager.provider.constructor.name);
        this.callback(err2, null, this);
        this.emit('error', err2);
        return this;
    }

Creo que para la suscripción de eventos deberías intentar usar otras alternativas de proveedor.

ACTUALIZACIÓN: para obtener el valor de los parámetros del evento, puede cambiar el código de esta manera:

   it("...", async () => {

            let livello = await instance.methods.bar(accounts[0]).send();
            console.log(livello.events.foo.returnValues);
}

Esto imprimirá los valores de los parámetros del evento. Para obtener más información, visite: https://web3js.readthedocs.io/en/1.0/web3-eth-contract.html#methods-mymethod-send

Además, si está buscando imprimir solo el valor de las variables, debería usar la función vista/pura sin eventos. Para obtener más información, visite: https://solidity.readthedocs.io/en/v0.5.0/contracts.html#functions

actualicé mi pregunta
¿Está buscando obtener los valores de las variables de evento de la transacción?
Me gustaría tener un método para depurar mi contrato. Quiero obtener el valor de la resolución. ¿El evento es un buen enfoque?
elimínelo .call()de su llamada de función y lo obtendrá en los parámetros del evento.
tengo el mismo errorThe current provider doesn't support subscriptions: HttpProvider
Eliminar ese código de evento y agregarconsole.log(livello.logs.foo.args)
gracias por responder, si hago console.log(livello.logs.foo.args); esta vacio