[英]how to create new ethereum/solidity contract for each test in javascript/truffle
我已经写在了复仇的智能合同密实度的语言。 为了测试的东西,我可以使用运行本地节点伽纳彻和使用上我的合同部署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 ,但是松露通过与智能合约的JavaScript连接为您定义artifacts
。
松露contract
功能几乎与 Mocha的describe
功能相同 ,只是有一点我不明白的变化! 我以为contract
每次都会使我的合同更新。 没有。 也许我可以使用诸如new Round()
类的东西来代替Round.deployed()
,但是我只是不知道如何。
该解决方案不必使用松露。
请注意, .new
和.deployed
不相同。 看看我在这里发现了什么。
请按照以下示例操作,它应该可以解决您的问题:
// 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
以便您始终从新合同开始。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.