我有这样一个愚蠢的智能合约:
pragma solidity ^ 0.4.24;
合同ProdottoFactory {
function foo()视图返回(string nome){ 返回“foo”; }}我想测试一下……
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"); }); }); });
我在合同中做了两处小改动:
我补充道 public 关键词。始终定义函数的可见性是一种很好的做法。
public
我换了 view 至 pure 。当您没有从区块链/状态变量中读取时,请使用 pure 。可以在文档中找到更多信息 这里 。
view
pure
仅供参考,您不必要求chai或mocha库。当你使用启动松露项目时,它已经存在 truffle init 命令。该 before 关键字是Mocha库的一部分。您可以阅读更多相关信息 这里 。
truffle init
before
最后,如果你想知道它们之间的差异 new 和 deployed 在Truffle中的关键字,阅读我的帖子 这里 。
new
deployed