Este es mi archivo de prueba:
pragma solidity ^0.4.24;
import "truffle/Assert.sol";
import "truffle/DeployedAddresses.sol";
import "../contracts/Salaries.sol";
contract TestSalaries {
function testEmployeeInsertion() public {
Salaries salaries = Salaries(DeployedAddresses.Salaries());
address addr = address(0);
salaries.addEmployee(address(0), "Alicia Drake", "Lead Engineer");
Assert.equal(salaries.employees(addr).name, "Alicia Drake");
}
}
Y las definiciones en Salaries.sol
:
struct Employee {
string name;
string role;
}
mapping (address => Employee) public employees;
¿Cómo puedo escribir pruebas para verificar el nombre y el rol del empleado? Actualmente, recibo el siguiente error:
TypeError: Indexed expression has to be a type, mapping or array (is tuple(string memory,string memory))
Assert.equal(salaries.employees(addr)[0], "Alicia Drake");
Del mismo modo, ¿hay alguna forma de registrar las variables en la consola mientras se ejecutan las pruebas?
usando truffle 4.1.14
_
Para depurar truffle
pruebas es mucho más conveniente escribir pruebas enjavascript
En su caso, necesita usar []
en lugar de()
salaries.employees[addr].name
https://solidity.readthedocs.io/en/v0.4.21/types.html#mappings
Aquí están todas las firmas posibles para equal
:
function equal(string a, string b, string message) public returns (bool result)
function equal(bytes32 a, bytes32 b, string message) public returns (bool result)
function equal(address a, address b, string message) public returns (bool result)
function equal(bool a, bool b, string message) public returns (bool result)
function equal(uint a, uint b, string message) public returns (bool result)
function equal(int a, int b, string message) public returns (bool result)
function equal(uint[] arrA, uint[] arrB, string message) public returns (bool result)
function equal(int[] arrA, int[] arrB, string message) public returns (bool result)
function equal(address[] arrA, address[] arrB, string message) public returns (bool result)
function equal(bytes32[] arrA, bytes32[] arrB, string message) public returns (bool result)
expresión tiene que ser un tipo, mapeo o matriz (es tupla(memoria de cadenas,memoria de cadenas)) Assert.equal(salaries.employees(addr)[0], "Alicia Drake");
gran flota