Error: missing revert data in call exception while testing with Hardhat
Error: missing revert data in call exception while testing with Hardhat
我想使用 hardhat 测试获取我的函数 TokenUri。
这是:
function tokenURI(uint256 tokenId) public view virtual override returns (string memory){
require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");
string memory currentBaseURI = _baseURI();
return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, tokenId.toString(), ".json")) : "";
}
我想查询一个不存在的token的URI。测试应该失败并恢复为“ERC721Metadata:URI query for nonexistent token”
这是我用 hardhat 进行的测试(tokenId 1 不存在):
it("should not work", async function () {
let uri = await this.deployedContract.tokenURI(1);
console.log(uri);
await expect(uri).to.be.revertedWith(
"ERC721Metadata: URI query for nonexistent token"
);
});
我 npx hardhat test 然后我有这个错误“错误:在调用异常中缺少恢复数据;交易无故恢复字符串 " 后跟一个巨大的错误块。
让你明白“This.deployedContract”是什么:
it("should deploy the smart contract", async function () {
const baseURI = "ipfs://cid/";
const Contract = await ethers.getContractFactory("test");
this.deployedContract = await Contract.deploy(baseURI);
});
有人遇到同样的问题吗?
此解决方案有效。我认为错误是因为我在“this.deployedContract.tokenURI(1)”之前使用了“await”,这不是 return 承诺。
我想使用 hardhat 测试获取我的函数 TokenUri。 这是:
function tokenURI(uint256 tokenId) public view virtual override returns (string memory){
require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");
string memory currentBaseURI = _baseURI();
return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, tokenId.toString(), ".json")) : "";
}
我想查询一个不存在的token的URI。测试应该失败并恢复为“ERC721Metadata:URI query for nonexistent token”
这是我用 hardhat 进行的测试(tokenId 1 不存在):
it("should not work", async function () {
let uri = await this.deployedContract.tokenURI(1);
console.log(uri);
await expect(uri).to.be.revertedWith(
"ERC721Metadata: URI query for nonexistent token"
);
});
我 npx hardhat test 然后我有这个错误“错误:在调用异常中缺少恢复数据;交易无故恢复字符串 " 后跟一个巨大的错误块。
让你明白“This.deployedContract”是什么:
it("should deploy the smart contract", async function () {
const baseURI = "ipfs://cid/";
const Contract = await ethers.getContractFactory("test");
this.deployedContract = await Contract.deploy(baseURI);
});
有人遇到同样的问题吗?
此解决方案有效。我认为错误是因为我在“this.deployedContract.tokenURI(1)”之前使用了“await”,这不是 return 承诺。