如何解决无法调用方法 - mocha
我正在我的第一个名为 InBox.sol
的智能合约中运行一些测试。
我想调用方法 .message
以查看它是否等于我在使用 web3 部署合约时使用的默认变量。
pragma solidity >=0.6.12;
contract InBox {
string public message;
function initialInBox(string memory initialMessage) public {
message = initialMessage;
}
function setMessage(string memory newMessage) public {
message = newMessage;
}
}
我使用 Mocha 的测试文件是:
let accounts
let inBox
beforeEach(async () => {
// Get a list of all accounts
accounts = await web3.eth.getAccounts()
// Use one of those account to deploy the contract
inBox = await new web3.eth.Contract(abi)
.deploy({ data: bytecode,arguments: [INITIAL_ARGUMENT]})
.send({ from: accounts[0],gas: GAS})
})
describe(('InBox'),() => {
it("has a default message",async () => {
const message = await inBox.methods.message() // Returns a big object
console.log(message)
const messageCalled = await inBox.methods.message().call()
console.log(messageCalled) // Returns nothing
assert.strictEqual(message,INITIAL_ARGUMENT)
})
})
解决方法
您的 JS inbox
变量是 web3.eth.Contract
(docs) 的一个实例。
inbox.methods.message()
是包含 .call()
方法的辅助对象的实例(即您评论中的“返回一个大对象”),当您想要执行读取时需要使用它- 只能打电话。
const message = await inbox.methods.message().call() // Returns the string
文档:https://web3js.readthedocs.io/en/v1.3.4/web3-eth-contract.html#methods-mymethod-call
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。