松露测试因类型错误而失败
Truffle test fails with TypeError
我有一个非常简单的合同,它在混音编辑器中工作得很好。
我只是想学习 truffle.I 启动了一个空的松露项目,放置了合约并成功编译。
然而truffle test
给出以下错误
合同:
pragma solidity ^0.4.18;
contract Greetings{
string public message;
constructor() public {
message = "Hello";
}
function getGreeting() public view returns (string){
return message;
}
}
测试:
var Greetings = artifacts.require("Greetings");
contract('Greetings Test', async (accounts) => {
it("check for greetings message", async () => {
let greeting = await Greetings.deployed();
let message = await greeting.getGreeting().call();
console.log(message);
});
});
错误:
Contract: Greetings Test
1) check for greetings message
> No events were emitted
0 passing (103ms)
1 failing
1) Contract: Greetings Test
check for greetings message:
TypeError: greeting.getGreeting(...).call is not a function
at Context.it (test/campaignfactory.js:7:52)
at <anonymous>
at process._tickCallback (internal/process/next_tick.js:188:7)
注:我想用asnyc/await
。
您调用函数的方式有误。你要么使用
let message = await greeting.getGreeting.call();
或
let message = await greeting.getGreeting()
不能混用语法。当您调用该方法(例如 getGreeting()
)时,web3 将检查是调用还是事务,并会为您使用正确的方法。 doc
如果您想明确说明,那么您应该使用拳头方式。
我有一个非常简单的合同,它在混音编辑器中工作得很好。
我只是想学习 truffle.I 启动了一个空的松露项目,放置了合约并成功编译。
然而truffle test
给出以下错误
合同:
pragma solidity ^0.4.18;
contract Greetings{
string public message;
constructor() public {
message = "Hello";
}
function getGreeting() public view returns (string){
return message;
}
}
测试:
var Greetings = artifacts.require("Greetings");
contract('Greetings Test', async (accounts) => {
it("check for greetings message", async () => {
let greeting = await Greetings.deployed();
let message = await greeting.getGreeting().call();
console.log(message);
});
});
错误:
Contract: Greetings Test
1) check for greetings message
> No events were emitted
0 passing (103ms)
1 failing
1) Contract: Greetings Test
check for greetings message:
TypeError: greeting.getGreeting(...).call is not a function
at Context.it (test/campaignfactory.js:7:52)
at <anonymous>
at process._tickCallback (internal/process/next_tick.js:188:7)
注:我想用asnyc/await
。
您调用函数的方式有误。你要么使用
let message = await greeting.getGreeting.call();
或
let message = await greeting.getGreeting()
不能混用语法。当您调用该方法(例如 getGreeting()
)时,web3 将检查是调用还是事务,并会为您使用正确的方法。 doc
如果您想明确说明,那么您应该使用拳头方式。