не является адресом договора во время теста на трюфель - PullRequest
0 голосов
/ 07 ноября 2018

У меня глупый умный контракт, подобный этому:

pragma solidity ^0.4.24;

contract ProdottoFactory  {

    function foo() view returns(string nome){
        return "foo";
    }
}

И я хочу проверить это с помощью chai

var Prodotto = artifacts.require("ProdottoFactory");
expect = require("chai").expect;


contract("descrizione primo test", function () {
    describe("test 2", function () {
        it("blablabla", function () {
            return Prodotto.new().then(
                istance => {
                    prodottoContract = istance;
                }
            )
        })
    })
})


contract("descrizione primo test2", function () {
    describe("test 2 2", function () {
        it("blablabla2",function () {
            return prodottoContract.foo().then(function (res) {
                expect(res.toString()).to.be.equal("foo")
            })
        })
    })
})

Когда я запускаю команду трюфельный тест У меня есть эта ошибка

Ошибка: попытка запустить транзакцию, которая вызывает функцию контракта, но адрес получателя 0xe8f29e5c4ca41c5b40ed989439ddeae4d9384984 не является адресом контракта

1 Ответ

0 голосов
/ 08 ноября 2018

truffle.js

module.exports = {
  networks: {
    development: {
      host: "127.0.0.1",
      port: 7545, // Ganache GUI
      network_id: "*" // Match any network id
    }
  }
};

контракты / ProdottoFactory.sol

pragma solidity ^0.4.24;

contract ProdottoFactory  {
  function foo() pure public returns(string nome){
    return "foo";
  }
}

тест / ProdottoFactory.js

var pf = artifacts.require("ProdottoFactory");

contract('ProdottoFactory', function(accounts) {
  var pfInstance;

  before(function() {
    return pf.new()
      .then(function(instance) {
        pfInstance = instance;
      });
  });

  it("should return foo", function() {
    return pfInstance.foo.call()
      .then(function(str) {
        assert.equal(str, "foo");
      });
  });
});

Я внес 2 небольших изменения в ваш контракт:

  1. Я добавил public ключевое слово. Рекомендуется всегда определять видимость вашей функции.

  2. Я заменил view на pure. Когда вы не читаете из блокчейна / переменной состояния, используйте pure. Более подробную информацию можно найти в документации здесь .

К вашему сведению, вам не требуется библиотека чая или мокко. Он уже есть, когда вы запускаете проект Truffle с помощью команды truffle init. Ключевое слово before является частью библиотеки Mocha. Подробнее об этом можно прочитать здесь .

Наконец, если вы хотите узнать разницу между ключевыми словами new и deployed в Truffle, прочитайте мою ветку здесь .

...