Dies ist meine Testdatei:
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");
}
}
Und die Definitionen in Salaries.sol
:
struct Employee {
string name;
string role;
}
mapping (address => Employee) public employees;
Wie kann ich Tests schreiben, um den Namen und die Rolle des Mitarbeiters zu verifizieren? Aktuell bekomme ich folgenden Fehler:
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");
Gibt es eine Möglichkeit, die Variablen in der Konsole zu protokollieren, während die Tests ausgeführt werden?
Verwenden truffle 4.1.14
.
Um truffle
Tests zu debuggen, ist es viel bequemer, Tests hineinzuschreibenjavascript
In Ihrem Fall müssen Sie []
stattdessen verwenden()
salaries.employees[addr].name
https://solidity.readthedocs.io/en/v0.4.21/types.html#mappings
Hier sind alle möglichen Signaturen für 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)
Ausdruck muss ein Typ, ein Mapping oder ein Array sein (ist ein Tupel (Stringspeicher,Stringspeicher)) Assert.equal(salaries.employees(addr)[0], "Alicia Drake");
GrandFleet