Solidity
使用安全帽測試時函式不返回 uint256
這是應該返回的函式
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 }); });
好的,所以在擺弄之後,我已經意識到問題所在了。鏈外無法訪問的非視圖/純函式的返回值(即其他智能合約)。因此,要在返回函式時檢索返回值,必須使用事件來代替。
相關問題/答案在這裡供將來參考以及任何偶然發現相同問題的人。