Las pruebas de Truffle Javascript no cambiarán el estado del contrato (el estado del contrato no cambiará)

Revisé una respuesta similar pero no funcionó. En este momento, estoy comenzando con un Ejemplo probando trufas, hice un pequeño proyecto de Echo basado en Pet Store Box de Truffle. Y estoy teniendo algunos problemas:

Mi contrato es así:

pragma solidity ^0.4.24;

import "./strings.sol";

contract Echo{
    address public owner;
    string[] private history;
    using strings for *;
    string public s;
    string public lastMessage;
    uint public messageCount;

modifier onlyOwner() {
    if (msg.sender == owner) _;
}

constructor() public {
    owner = msg.sender;
    lastMessage = "None yet";
}

function echo(string text) public returns (string) {
    history.push(text);
    lastMessage = text;
    messageCount++;
    return text;
}

function fullHistory() public view returns (string){
    string memory _history = "";
    for (uint i = 0; i < history.length; i++){
        _history = _history.toSlice().concat("||".toSlice()).toSlice().concat(history[i].toSlice());
    }
    return _history;
}

}

Entonces mis pruebas en solidity funcionan perfectamente, recibí los nuevos valores cuando reviso el historial de comandos:

contract TestEcho {
    Echo echo = Echo(DeployedAddresses.Echo());

    function testWeReceiveWhatWeSend() public {
        string memory testText = "HELLO";
        string memory returnedText = echo.echo(testText);
        Assert.equal(returnedText, testText, "Should receive the same");
//        Assert.notEqual(word_count, 0, "Should have receive more than one");
    }

    function testWeReceiveTheHistory() public {
        string memory testText = "HELLO";
        echo.echo(testText);
        string memory fullHistory = echo.fullHistory();
        Assert.equal(fullHistory, "||HELLO||HELLO", "Should receive something");
    }

    function testWeReceiveTheLastMessage() public {
        string memory testText = "THE SECOND";
        echo.echo(testText);
        string memory message = echo.lastMessage();
        Assert.equal(message, testText, "Should receive the last message");
    }

    function testWeReceiveTheMessageCount() public {
        uint msgCount = echo.messageCount();
        Assert.notEqual(msgCount, 0, "Should be more than 0");
    }
}

Pero en javascript, fallan al modificar el estado del contrato, la historymatriz nunca cambiará. Me pasa lo mismo en la web. Tal vez me estoy perdiendo algo obvio con seguridad, pero llevo días con esto sin una solución:

contract('Echo', async (accounts) => {
const from = accounts[0];

it("should return the same that i sent", async () => {
    const instance = await Echo.deployed();
    const textMessage = "TEST";
    const text = await instance.echo.call(textMessage, {from});
    assert.equal(text, textMessage, "echoes");
});

it("should return full history", async () => {
    const instance = await Echo.deployed();
    await instance.echo.call(web3.fromAscii("TEST"), {from});
    await instance.echo.call("TEST", {from});
    await instance.echo.call("TEST", {from});
    const history = await instance.fullHistory.call();
    console.log("FULL_HISTORY", history);
});
}

Y por alguna razón que desconozco, Metamask dejo de preguntarme sobre gastar algo de Gas cuando uso la función de eco en el navegador, ya revisé el puerto, y la red está correcta, la cuenta tiene fondos, lo único que cambió fue que accidentalmente desinstalé METAMASK e instalé una nueva versión. Aún así, eso no explica por qué las pruebas no funcionarán.

agradeceré la ayuda posible

Cambiar await Echo.deployed()a await artifacts.require("Echo.sol").new(). Además, no es obligatorio, pero es posible que desee colocarlo dentro de una beforecláusula en lugar de dentro de cada una de las itcláusulas (dependiendo de cómo desee que se comporte su prueba).
@goodvibration mismo resultado

Respuestas (1)

¡¡¡Resuelto!!!, perdón por todos los problemas...

EXPLICACIÓN:

Cuando está utilizando web3.js, el formulario:

ContractInstance.method.call()

Es solo para los métodos que se anotan como vista, o son de solo lectura, aún puede usar otra cosa, pero no cambiará el estado del contrato. En su lugar, desea utilizar:

ContractInstance.method()

Solo un pequeño detalle. JAJAJA