如何测试通过Solidity函数()返回的空结构?



这是一个Solidity合约示例,其中我有一个返回空结构体的函数。

我想测试从一个函数内的合同为空结构体,但我有困难找出正确的语法…

contract MyNFTShop is ERC721 {
struct NFTCardAttributes {
uint256 cardIndex;
string name;
string imageURI;
}
NFTCardAttributes[] defaultCards;
constructor(
string[] memory cardNames,
string[] memory cardImageURIs,
) ERC721("NFT", "NFTC") {
for (uint256 i = 0; i < cardNames.length; i += 1) {
defaultCards.push(
NFTCardAttributes({
cardIndex: i,
name: cardNames[i],
imageURI: cardImageURIs[i],
})
);
NFTCardAttributes memory c = defaultCards[i];
}
}

function checkIfUserHasNFTCard() public view returns (NFTCardAttributes memory) {
uint256 userNFTCardNftTokenId = nftCardHolders[msg.sender];
if(userNFTCardNftTokenId > 0 ) {
return nftCardHolderAttributes[userNFTCardNftTokenId];
} else {
NFTCardAttributes memory emptyStruct;
return emptyStruct;
}
}

function do_something() public () {
if (getAllDefaultCards() == EMPTY) { <---- NEED HELP HERE
// sendMoney to whatever
}
}
}

帮助使用这个Solidity函数。我知道它在从brownie/python调用时返回(0,0,0),但我不知道如何测试它。使用Solidity返回的结构体确实是空的(0,0,0)。)

function do_something() public () {
if (getAllDefaultCards() == EMPTY) { <---- NEED HELP HERE
// sendMoney to whatever
}
}

变通方法

我基本上把这个函数分成两个独立的函数来获得想要的效果:

function checkIfUserHasNFTCard() public view returns (bool)
function getUserHasNFTCard() public view returns (NFTCardAttributes)

虽然,主要的问题仍然存在,并将更新一旦我找出答案!

最新更新