我正在尝试计算AMM中一些代币的价格(我们在Moonbeam上,所以通过GLMR报价池路由以USDC获得价格(
export function tokenPrice(token: string): BigInt {
switch(token){
case DOT:
let glmrDot = GlmrDotContract.bind(Address.fromString(GLMR_DOT));
let glmrBalance = glmrDot.try_balanceOf(Address.fromString(WGLMR)).value;
let tokenBalance = glmrDot.try_balanceOf(Address.fromString(DOT)).value;
return tokenBalance.div(glmrBalance).div(priceOfGlmr())
case USDC:
const glmrUsdc = USDCGlmrContract.bind(Address.fromString(GLMR_USDC));
glmrBalance = glmrUsdc.try_balanceOf(Address.fromString(WGLMR)).value;
tokenBalance = glmrUsdc.try_balanceOf(Address.fromString(USDC)).value;
return glmrBalance.div(tokenBalance)
}
return BigInt.zero()
}
当我在火柴棒上运行测试时,我会得到
Could not find a mocked function for function with address: 0x555b…10d1, name: balanceOf, signature balanceOf(address):(uint256), params: [Address(0x0e358838ce72d5e61e0018a2ffac4bec5f4c88d2)]
理想情况下,我会有一些方法将令牌放入该地址,balanceOf将正常工作,报告这些池中的令牌数量,以便我的代码可以运行。
有办法做到这一点吗?或者让让模拟呼叫?
Matchstick是一个单元测试工具,这意味着它将需要对事件处理程序之外的所有内容进行模拟,包括外部调用和事件。没有一种方法可以在不嘲笑的情况下使用火柴棒。
您所描述的内容类似于集成测试。你可以使用安全帽来实现这一点。您还需要运行ipfs和图形节点。测试的设置是调用合约来触发事件,等待子图同步,然后针对图节点的graphql查询断言