代码之家  ›  专栏  ›  技术社区  ›  KitKarson

Truffle测试因类型错误而失败

  •  0
  • KitKarson  · 技术社区  · 8 年前

    我有一个非常简单的合同,在Remix编辑器中工作得非常好。

    我只想学松露。我发起了一个空松露项目,签订了合同,并成功地编译了它。

    然而 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 回复  |  直到 8 年前
        1
  •  1
  •   qbsp    8 年前

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

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

    let message = await greeting.getGreeting()
    

    您不能混合使用语法。当你调用方法(例如 getGreeting() )Web3将检查是呼叫还是交易,并为您使用正确的呼叫。 doc

    如果你想直截了当,那么你应该用第一种方式。