松露测试因TypeError而失败

时间:2018-05-27 03:41:27

标签: solidity truffle

我有一个非常简单的合同,在混音编辑器中完全正常。

我只是想学习松露。我发起了一个空的松露项目,放置合同并成功编译。

但是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

1 个答案:

答案 0 :(得分:1)

调用函数的方式有错误。要么使用

let message = await greeting.getGreeting.call(); 

let message = await greeting.getGreeting()

您无法混合语法。当您调用该方法时(例如getGreeting()),web3将检查是否是通话或交易,并将为您使用正确的方法。 doc

如果您想要明确,那么您应该使用第一种方式。