我正在尝试测试函数( test ),它包含对另一个契约函数(transferFrom)的引用。但当我测试的时候我犯了个错误。但是MyToken已经部署到了硬件网络,并且有地址。
这是一份合同
import "./MyToken.sol";
contract Staking {
MyToken public myToken;
function stake(uint256 _value) public {
myToken.transferFrom(msg.sender, address(this), _value);
}
}这是一个测试
import { SignerWithAddress } from "@nomiclabs/hardhat-ethers/signers";
import { expect } from "chai";
import { assert } from "console";
import { ethers } from "hardhat";
import { MyToken, MyToken__factory, Staking, Staking__factory } from "../typechain";
// import { MyToken, MyToken__factory } from "../typechain";
describe("MyToken", function () {
let staking: Staking;
let myToken: MyToken;
let bob: SignerWithAddress,
alice: SignerWithAddress;
before(async () => {
[bob, alice] = await ethers.getSigners();
})
beforeEach(async () => {
const MyToken = await ethers.getContractFactory("MyToken") as MyToken__factory;
myToken = await MyToken.deploy() as MyToken;
await myToken.deployed();
const Staking = await ethers.getContractFactory("Staking") as Staking__factory;
staking = await Staking.deploy() as Staking;
await staking.deployed();
})
**it("staking", async function () {
const value = 100;
await staking.stake(value);
})**
发布于 2022-01-26 10:54:23
如果您的Staking只看上去像您在问题中共享的那样,那么您就没有设置myToken的地址。您需要在构造函数或定义中显式设置地址。
例如:
import "./MyToken.sol";
contract Staking {
MyToken public myToken;
constructor(address token) {
myToken = token;
}
function stake(uint256 _value) public {
myToken.transferFrom(msg.sender, address(this), _value);
}
}在测试中,您需要将myToken的地址传递给Staking.deploy函数:
staking = await Staking.deploy(myToken.address) as Staking;调试的一种方法是检查您的测试是否正确初始化了myToken:
expect(await staking.myToken()).to.be.eq(myToken.address)https://ethereum.stackexchange.com/questions/119959
复制相似问题