我在用安全帽测试我的智能合同时遇到了这个错误
TypeError:无法读取未定义的属性(读取“checkUpkeep”)
测试代码
describe("checkUpkeep", () => {
it("returns false if people haven't sent any eth", async () => {
await network.provider.send("evm_increaseTime", [interval.toNumber() + 1])
await network.provider.send("evm_mine", [])
const { upkeepNeeded } = await raffle.callstatic.checkUpkeep("0x")
assert(!upkeepNeeded)
})
})
smart合同的相关代码
function checkUpkeep(
bytes memory /* checkData*/
)
public
view
override
returns (
bool upkeepNeeded,
bytes memory /* performData */
)
{
bool isOpen = RaffleState.OPEN == s_raffleState;
bool timePassed = (((block.timestamp) - s_lastTimeStamp) > i_interval);
bool hasPlayers = s_players.length > 0;
bool hasBalance = address(this).balance > 0;
upkeepNeeded = (isOpen && timePassed && hasPlayers && hasBalance);
return (upkeepNeeded, "0x0");
}
发布于 2022-08-30 14:05:11
我知道为时已晚,但当您尝试调用checkUpkeep函数时,应该是"callStatic“而不是”回调“
发布于 2022-08-01 04:27:37
由于它的JS很难知道哪个函数调用正在尝试访问一个具有未定义值的变量。根据您提供的代码,对raffle
的引用甚至可能是未定义的。
但我假设这段代码与这是什么相同。
在您的硬件配置或测试导入中可能缺少一个导入。再检查一遍。看起来,在运行测试时,您的执行上下文需要的东西不会被注入。
https://stackoverflow.com/questions/73175127
复制相似问题