gpt4 book ai didi

javascript - 如何在 javascript/truffle 中为每个测试创建新的 ethereum/solidity 合约

转载 作者:行者123 更新时间:2023-11-28 20:26:49 27 4
gpt4 key购买 nike

背景

我在 Solidity 中编写了一个以太坊智能合约语言。为了进行测试,我可以使用 Ganache 运行本地节点并使用 truffle migrate 在其上部署我的合约。

要求

我想使用 JavaScript 测试我的合约。我想为每个测试创建一个我的合约实例。

我试过的

我在我的项目中创建了一个测试文件tests/test.js:

const expect = require('chai').expect

const Round = artifacts.require('Round')


contract('pledgersLength1', async function(accounts) {
it('1 pledger', async function() {
let r = await Round.deployed()
await r.pledge(5)
let len = (await r.pledgersLength()).toNumber()
expect(len).to.equal(1)
})
})
contract('pledgersLength2', async function(accounts) {
it('2 pledgers', async function() {
let r = await Round.deployed()
await r.pledge(5)
await r.pledge(6)
let len = (await r.pledgersLength()).toNumber()
expect(len).to.equal(2)
})
})

我用 truffle test 运行它。基本上是Mocha , 但是 truffle通过与智能合约的 JavaScript 连接为您定义 artifacts

truffle contract 函数 is almost the same作为 Mocha 的 describe 功能,有一个我不明白的小变化!我假设 contract 每次都会让我的契约(Contract)变新。它没有。或许我可以使用 new Round() 之类的东西来代替 Round.deployed(),但我不知道该怎么做。

该解决方案不必使用松露。

最佳答案

请注意 .new.deployed 是不一样的。看看我发现了什么 here .

按照这个例子,它应该可以解决你的问题:

// Path of this file: ./test/SimpleStorage.js
var simpleStorage = artifacts.require("./SimpleStorage.sol");

contract('SimpleStorage', function(accounts) {

var contract_instance;

before(async function() {
contract_instance = await simpleStorage.new();
});

it("owner is the first account", async function(){
var owner = await contract_instance.owner.call();
expect(owner).to.equal(accounts[0]);
});

});

.new 关键字将在新上下文中部署您的合约实例。

但是,.deployed 实际上会使用您之前部署的合约,即当您使用 truffle migrate 命令时。

在单元测试的上下文中,最好使用.new,这样你总是会从新的契约开始。

关于javascript - 如何在 javascript/truffle 中为每个测试创建新的 ethereum/solidity 合约,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52690481/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com