[英]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.