松露测试因类型错误而失败

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

如果您想明确说明,那么您应该使用拳头方式。