測(cè)試文件下新建market.js文件
扁平化,將所有依賴放在tmp.sol,可以去給他人使用
npx hardhat flatten > tmp.sol文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-794425.html
測(cè)試文件文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-794425.html
const {expect} = require('chai');
const {ethers} = require('hardhat');
describe('Market',async function(){
//定義三個(gè)合約,兩個(gè)賬戶
let usdt,nft,market,accountA,accountB;
beforeEach(async () =>{
//hardhat提供兩個(gè)賬戶
[accountA,accountB] = await ethers.getSigners();
//部署三個(gè)合約
const USDT = await ethers.getContractFactory('cUSDT');
usdt = await USDT.deploy();
const MyNFT = await ethers.getContractFactory('NFTM');
nft = await MyNFT.deploy(accountA.address);
const Market = await ethers.getContractFactory('Market');
market = await Market.deploy(usdt.target,nft.target);
//給賬戶1挖1usdt的 erc20 部署erc20合約是就給賬戶A了1e26的erc20
//給賬戶2挖兩個(gè)nft
await nft.safeMint(accountB.address);
await nft.safeMint(accountB.address);
await nft.connect(accountB).setApprovalForAll(accountA.address,true);
//給market授權(quán)花費(fèi)A的錢(qián)(默認(rèn)連接的就是第一個(gè)用戶)
//await usdt.connect(accountA).approve(market.target,"1e26");
await usdt.approve(market.target,"100000000000000000000000000");
});
//驗(yàn)證erc20變量==usdt的地址
it('its erc20 address should be usdt',async function(){
expect(await market.erc20()).to.equal(usdt.target);
});
it('its erc721 address should be MyNft',async function(){
expect(await market.erc721()).to.equal(nft.target);
});
it('accountB should have two nfts',async function(){
expect(await nft.balanceOf(accountB.address)).to.equals(2);
});
it('accountA should have 1e26 usdt',async function(){
expect(await usdt.balanceOf(accountA.address)).to.equals("100000000000000000000000000");
});
it('accountB can list 2 nft to market',async function(){
const price = "0x0000000000000000000000000000000000000000000000000001c6bf52634000";
//await nft.connect(accountB).safeTransferFrom(accountB.address,market.target,0,price);
//報(bào)錯(cuò)
//TypeError: ambiguous function description (i.e. matches "safeTransferFrom(address,address,uint256)",
//"safeTransferFrom(address,address,uint256,bytes)") (argument="key", value="safeTransferFrom", code=INVALID_ARGUMENT, version=6.9.0)
//ambiguous 混淆同名函數(shù),即使參數(shù)不一樣,也分不出來(lái),所以用下面的方法,明確選擇器的名字
//這里應(yīng)該是B來(lái)調(diào)用進(jìn)行上架,但是默認(rèn)是a,老師忘記怎么連接了
//于是在上面定義 await nft.connect(accountB).setApprovalForAll(accountA.address,true);
//b允許a使用它的nft
expect(await nft['safeTransferFrom(address,address,uint256,bytes)'](accountB.address,market.target,0,price))
.to.emit(market,"NewOrder");
expect(await nft['safeTransferFrom(address,address,uint256,bytes)'](accountB.address,market.target,1,price))
.to.emit(market,"NewOrder");
expect(await nft.balanceOf(accountB.address)).to.equal(0);
expect(await nft.balanceOf(market.target)).to.equal(2);
expect(await market.isListed(0)).to.equal(true);
expect(await market.isListed(1)).to.equal(true);
expect((await market.getAllNFTs())[0][0]).to.equal(accountB.address);
expect((await market.getAllNFTs())[0][1]).to.equal(0);
expect((await market.getAllNFTs())[0][2]).to.equal(price);
expect((await market.getAllNFTs())[1][0]).to.equal(accountB.address);
expect((await market.getAllNFTs())[1][1]).to.equal(1);
expect((await market.getAllNFTs())[1][2]).to.equal(price);
expect(await market.getOrderLength()).to.equal(2);
expect((await market.connect(accountB).getMyNFTs())[0][0]).to.equal(accountB.address);
expect((await market.connect(accountB).getMyNFTs())[0][1]).to.equal(0);
expect((await market.connect(accountB).getMyNFTs())[0][2]).to.equal(price);
expect((await market.connect(accountB).getMyNFTs())[1][0]).to.equal(accountB.address);
expect((await market.connect(accountB).getMyNFTs())[1][1]).to.equal(1);
expect((await market.connect(accountB).getMyNFTs())[1][2]).to.equal(price);
});
});
到了這里,關(guān)于DAPP開(kāi)發(fā)【09】NFT交易市場(chǎng)開(kāi)發(fā)(hardhat測(cè)試)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!