Solidity

使用安全帽測試時函式不返回 uint256

  • March 19, 2021

這是應該返回的函式uint256

function initializeToken(string memory name, string memory symbol) public returns (uint256) {

  // _creatorIds is a @openzeppelin counter
  address creator = msg.sender;
  _creatorIds.increment();
  newId = _creatorIds.current();

  Token token = new Token(symbol, name, creator);
  _tokens[newId] = address(token);
  return newId;
}

我按照此處給出的測試說明進行操作

當我 console.log() 將結果放入測試文件並使用安全帽執行它時,它返回一個

{ Object (hash, blockHash, ...) }

代替

{ BigNumber (_hex, _isBigNumber) }

所以我不能做任何平等測試。

這可能有一個非常簡單的答案,但我已經嘗試重新編譯多次,但它仍然不起作用。

編輯:

這是所要求的測試程式碼:

const { expect } = require('chai');

describe("TokenDistributor contract", function() {
   it("Deployment should return a Token with name Test Token and symbol TTN", async function() {
     const [distributor] = await ethers.getSigners();
 
     const TokenDistributor = await ethers.getContractFactory("TokenDistributor");
 
     const instance = await TokenDistributor.deploy();
     await instance.deployed();

     var tokenId = await instance.initializeToken("Test Token","TTN");
     console.log(tokenId); //This is where I did the console.log to see what was wrong
     
     expect(tokenId).to.equal(1); //this is where the test fails
   });
 });

好的,所以在擺弄之後,我已經意識到問題所在了。鏈外無法訪問的非視圖/純函式的返回值(即其他智能合約)。因此,要在返回函式時檢索返回值,必須使用事件來代替。

相關問題/答案在這裡供將來參考以及任何偶然發現相同問題的人。

引用自:https://ethereum.stackexchange.com/questions/94866