如何正确测试 'onlyOwner' 修饰符的还原?

How to properly test a revert for 'onlyOwner' modifier?

在我继承自 OpenZeppelin 的 OwnableAccessControl 的 Solidity 合约中,我有一个函数,合约所有者可以调用该函数来为帐户提供 ADMIN 角色。它看起来像这样:

function addAdmin(address account) public virtual onlyOwner {
   _grantRole(ADMIN, account);
}

在我的测试文件中,我将 OpenZeppelin 的 test-environmenttest-helper 与 Mocha 和 Chai 一起使用。我正在尝试测试从非所有者帐户调用 addAdmin() 是否失败。我的测试看起来像这样:

it('denies access to non-Owners to add a new ADMIN', async function() {
   await expectRevert(
      await pool.addAdmin(notlisted1, { from: notlisted2 }),
      "Ownable: caller is not the owner"
   );
});

似乎 addAdmin() 正确还原,但测试失败。当此测试失败时,我在命令行看到的消息是:

Error: Returned error: VM Exception while processing transaction: revert Ownable: caller is not the owner -- Reason given: Ownable: caller is not the owner.

对这里发生的事情有什么想法吗?为什么 expectRevert() 断言不通过?

这实际上是一个简单的错误。在 pool.addAdmin() 之前使用 await 是不正确的。删除它解决了这个问题。