首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >坚固性:使用waffle + chai测试恢复的断言不起作用

坚固性:使用waffle + chai测试恢复的断言不起作用
EN

Stack Overflow用户
提问于 2021-10-29 20:18:59
回答 1查看 1.4K关注 0票数 1

我正在测试一个ERC721令牌的智能合约,该令牌继承自OpenZeppelin,在NodeJS v14.18.0中使用waffle和chai,但是chai恢复的断言似乎没有预期的那样起作用。

依赖关系:

代码语言:javascript
复制
  "devDependencies": {
    "@nomiclabs/hardhat-ethers": "^2.0.1",
    "@nomiclabs/hardhat-etherscan": "^2.1.0",
    "@nomiclabs/hardhat-waffle": "^2.0.1",
    "@typechain/ethers-v5": "^5.0.0",
    "@types/chai": "^4.2.14",
    "@types/mocha": "^8.2.0",
    "@types/node": "^14.14.14",
    "chai": "^4.2.0",
    "dotenv": "^8.2.0",
    "ethereum-waffle": "^3.2.1",
    "ethers": "^5.0.24",
    "hardhat": "^2.0.5",
    "hardhat-typechain": "^0.3.4",
    "ts-generator": "^0.1.1",
    "ts-node": "^9.1.1",
    "typechain": "^4.0.1",
    "typescript": "^4.1.3"
  },

示例代码:

代码语言:javascript
复制
  let genesisTokenHolders: Array<string>;

        beforeEach(async () => {
            genesisTokenHolders = new Array(230).fill('0x0000000000000000000000000000000000000000')
            genesisTokenHolders[1] = addr1.address;
            genesisTokenHolders[2] = addr2.address;
        })

        describe('airdrop genesis tokens', async () => {
            it('should fail when non-owner calls the function', async () => {
                
                let addGenesisHoldersTx = await myToken.addGenesisTokenHolderAddresses(genesisTokenHolders)
                await addGenesisHoldersTx.wait();
                    
                await expect(await myToken.connect(addr1).airdropTokensToGenesisHolders(1, 2)).to.be.revertedWith("Ownable: caller is not the owner");
            })
        
            it('should succeed when called by the owner', async () => {

                let addGenesisHoldersTx = await myToken.addGenesisTokenHolderAddresses(genesisTokenHolders)
                await addGenesisHoldersTx.wait();
 
                let airdropTx = await myToken.connect(deployer).airdropTokensToGenesisHolders(1,2);
                await airdropTx.wait();
            
                // addr1 should own tokenID 1, addr2 should own tokenId 2
                await expect(await myToken.ownerOf(1)).to.hexEqual(addr1.address)
                await expect(await myToken.ownerOf(2)).to.hexEqual(addr2.address)
                
                await expect(await myToken.ownerOf(1000)).to.be.reverted;
            })
        });

尽管使用了.to.be.revertedWith().to.be.reverted,测试套件仍然会抛出错误:

代码语言:javascript
复制
         airdrop genesis tokens
           should fail when non-owner calls the function:
     Error: VM Exception while processing transaction: revert Ownable: caller is not the owner

         airdrop genesis tokens
           should succeed when called by the owner:
     Error: VM Exception while processing transaction: revert ERC721: owner query for nonexistent token

预期结果:测试应该通过。

EN

回答 1

Stack Overflow用户

发布于 2021-11-07 00:03:13

不要等待承诺在expect中得到解决

更改自:

代码语言:javascript
复制
await expect(await myToken.ownerOf(1000)).to.be.reverted;

至:

代码语言:javascript
复制
await expect(myToken.ownerOf(1000)).to.be.reverted;
票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69774377

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档