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 承诺。