当我想测试字符串值是否正确时,会出现问题。数字被正确断言,并且在尝试编译时不会返回错误消息。但是,当我尝试断言字符串时,它返回以下错误消息:
Error: Member "equal" is not available in type(library Assert) outside of storage.
Assert.equal(token.symbol(), "$", "The symbol of the token should be $");
^----------^
Compiliation failed. See above.
Token.sol
pragma solidity ^0.4.8;
contract Token {
/* The amount of tokens a person will get for 1 ETH */
uint256 public exchangeRate;
/* The name of the token */
string public name;
/* The address which controls the token */
address public owner;
/* The symbol of the token */
string public symbol;
/* The balances of all registered addresses */
mapping (address => uint256) balances;
/* Token constructor */
function Token(uint256 _exchangeRate, string _name, string _symbol) {
exchangeRate = _exchangeRate;
name = _name;
owner = msg.sender;
symbol = _symbol;
}
function getBalance(address account) returns (uint256 balance) {
return balances[account];
}
}
TestToken.sol
pragma solidity ^0.4.8;
// Framework libraries
import "truffle/Assert.sol";
import "truffle/DeployedAddresses.sol";
// Custom libraries and contracts
import "../contracts/Token.sol";
contract TestToken {
function testExchangeRate() {
Token token = new Token(500, "Dollar", "$");
uint256 expected = 500;
Assert.equal(token.exchangeRate(), expected, "The exchange rate should be 500 tokens for 1 ETH");
}
function testSymbol() {
Token token = new Token(500, "Dollar", "$");
Assert.equal(token.symbol(), "$", "The symbol of the token should be $");
}
}
为什么会这样,你如何解决?
答案 0 :(得分:2)
截至目前,可靠性不支持在合同之间返回字符串。因为在通话时不知道字符串的长度。所以他们只支持像bytes32这样的固定大小的arryas。
您可以使用多个bytes32来存储字符串的不同部分。
答案 1 :(得分:-3)
尝试将类型从string
更改为另一个,例如bytes32
。它有效。
一切顺利。