La prueba de trufa falla debido a un tipo de datos diferente al esperado

Estoy usando trufa y ganache para hacer una demostración simbólica para mí. Estoy siguiendo esta guía y luego haciendo mis propios cambios de acuerdo con mi proyecto.

Cuando intento ejecutar pruebas para verificar que mi contrato se está ejecutando correctamente, se me presenta un retorno de datos interesante que no estaba anticipando.

Cuando acuño un token usando esta prueba:

describe("mint", () => {
    it("Created token with specified attributes", async () => {
        let instance = await Token.deployed();
        let owner = await instance.owner();

        let tokenId = await instance.mint(5, 2, 5, 10, 5);

        describe("Expected output: ", tokenId);

        let attributes = await instance.getToken(0);
        assert.equal(attributes, [5, 2, 5, 10, 5]);
    });
});

Esperaba que esta función regresara [5, 2, 5, 10, 5]:

function getToken( uint _TokenId ) public view returns(
    uint256 value1,
    uint256 value2,
    uint256 value3,
    uint256 value4,
    uint16 value5
    ){
    Token memory _token = tokens[_TokenId];
    value1 = _token.value1;
    value2 = _token.value2;
    value3 = _token.value3;
    value4 = _token.value4;
    value5 = _token.value5;
}

Pero, en cambio, los atributos de la variable devuelven esta extraña estructura de datos que parece ser una matriz de 5 con 3 asignaciones de los caracteres "c", "e", "s" a una variable. "c" contiene el valor que esperaba:

{"c" : [5]  "e" : 0 "s" : 1}
{"c" : [2]  "e" : 0 "s" : 1}
{"c" : [5]  "e" : 0 "s" : 1}
{"c" : [10] "e" : 1 "s" : 1}
{"c" : [5]  "e" : 0 "s" : 1}

Mi pregunta es ¿por qué obtengo esta estructura de datos? ¿No debería estar recibiendo mis resultados esperados? Creo que el mapeo de la "e" es el número de dígitos - 1, pero no sé qué representa la "s". Podría pasar y hacer una matriz con cada una de las asignaciones "c", pero no sé si esta es la mejor manera de manejar esto.

Respuestas (1)

TLDR; usartokenId.toString()

La matriz que está recibiendo es una representación del BigNumber que se devuelve desde la cadena de bloques. O, en realidad, la cadena de bloques devuelve un uint256(o la cantidad de bits que use) y luego se convierte en un BigNumber.

El "problema" con BigNumber es que no puede mostrar su valor de esa manera. No estoy exactamente seguro de qué representan los valores de la matriz, pero creo que la biblioteca en sí es https://github.com/MikeMcl/bignumber.js/ .

De todos modos, para mostrar una versión humana del número, solo puede usar value.toString().