我正试图从expectEvent.inTransaction()中复制@openzeppelin/test-helpers中的“硬帽子”。
场景:token正在从owner转移到receiverContract。我想检查receiverContract是否发出了一个Received事件。
事务如下所示,由所有者发起。
const tx = await token.transferFrom(
owner.address, // <- From this wallet
receiverContract.address, // <- To this contract
tokenId,
{
from: owner.address,
}
);此测试可以显示发出Transfer事件的令牌。
await expect(tx)
.to.emit(this.token, "Transfer")
.withArgs(owner.address, receiverContract.address, tokenId);但我想写这样的东西..。
await expect(tx) // <- Not sure what to put here
.to.emit(receiverContract, "Received") // <- This may also be off
.withArgs(token, owner.address, tokenId, null);或者,我可以查看接收者的收据对象,但我也不知道如何得到.通常是通过..。
const tx = await token.transferFrom(owner.address, receiverContract.address, tokenId, {from: owner.address});
const receipt = await tx.wait();
console.log("receipt", receipt); // <- This will show an events array
// which I can check. But how do I get this same receipt object for
// the receiverContract发布于 2022-05-02 19:17:19
每个合同都可以通过console.log(receiverContract)查看.因此,我最终导航到合同中的event对象。这是合同记录的片段.
{
interface: Interface {
fragments: [ [ConstructorFragment], [EventFragment], [FunctionFragment] ],
_abiCoder: AbiCoder { coerceFunc: null },
functions: {
'onERC721Received(address,address,uint256,bytes)': [FunctionFragment]
},
errors: {},
events: { // <- This is what we're looking for
'Received(address,address,uint256,bytes,uint256)': [EventFragment {
name: 'Received',
anonymous: false,
inputs: [ [ParamType], [ParamType], [ParamType], [ParamType], [ParamType] ],
type: 'event',
_isFragment: true
}],
// ...
}运行console.log(receiverContract.interface.events)将为您提供以下嵌套对象
'Received(address,address,uint256,bytes,uint256)',
EventFragment {
name: 'Received', // <- This is the event name
anonymous: false,
inputs: [ [ParamType], [ParamType], [ParamType], [ParamType], [ParamType] ],
type: 'event',
_isFragment: true
}因此,为了查找和测试所发出的事件,这是可行的。
expect(
Object.entries(receiverContract.interface.events).some(
([k, v]: any) => v.name === "Received"
)
).to.be.equal(true);https://ethereum.stackexchange.com/questions/127208
复制相似问题