作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 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/
我是一名优秀的程序员,十分优秀!