当前位置: 首页 > 知识库问答 >
问题:

如何在javascript/truffle中为每个测试创建新的以太坊/实体合同

云曦之
2023-03-14

我已经写了一个以太坊智能合约在坚实的语言。为了测试,我可以使用Ganache运行一个本地节点,并使用truffle迁移在其上部署我的合同。

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

我在我的项目中创建了一个测试文件test/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)
    })
})

我运行它与松露测试。它基本上是摩卡,但是松露通过与智能合同的JavaScript连接为您定义了工件

松露<代码>合同功能和摩卡的<代码>描述功能几乎一样,有一个我不明白的小变化!我假设合同会使我的合同每次都是新的。它没有。也许我可以使用像new圆桌会议()这样的东西来代替Round.deployed(),但我只是不知道如何使用。

解决方案不必使用块菌。

共有1个答案

巩俊远
2023-03-14

请注意,. new.部署是不一样的。看看我在这里发现了什么。

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

// 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关键字将在新上下文中部署合同实例。

但是,。部署的实际上将使用您之前部署的契约,即当您使用truffle迁移命令时。

在单元测试的上下文中,最好使用。新建,以便您始终从新合同开始。

 类似资料:
  • 以太坊测试链 针对Ethereum以太坊有许多专用测试网络或者叫测试链,他们由各种客户端支持。 1.Rinkeby:只支持geth客户端。 2.Kovan:只支持Parity客户端。 3.Ropsten:支持geth和Parity客户端。 对于开发,建议你使用Rinkeby或KoVan测试链。这是因为他们使用的工作量证明POA共识机制,确保交易和块能够一致并及时的创建。Ropsten测试链,虽然最

  • 我已经创建了自定义区块链使用去以太网 我的网络有2个矿工节点与解锁帐户,然后一个公共节点与锁定帐户,只广播交易的矿工 我这样运行公共节点: 问题是,如果有人将合同创建发送到公共节点(例如使用MyEtherWallet),合同提交将被广播和挖掘。 我发现:https://ethereum.stackexchange.com/questions/11091/is-there-any-way-to-di

  • 根据以下链接:https://stackoverflow.com/a/20056622/1623597 https://stackoverflow.com/a/15640575/1623597TestNG不会在每个方法测试中创建新实例。 我有spring boot应用程序。我需要编写集成测试(控制器、服务、存储库)。有时为了创建新的测试用例,我需要数据库中的一些实体。为了忘记数据库中任何预定义的实

  • 以太坊(Ethereum)是一个支持智能合约的区块链平台,它与比特币最大的不同是,以太坊通过一个虚拟机(EVM)可以运行智能合约。 以太坊是Vitalik Buterin(维塔利克·布特林,人称V神)在2013年提出的概念,Vitalik最早参与了比特币社区的开发,并希望比特币把功能受限的脚本扩展成图灵完全的编程环境,但没有得到比特币开发社区的认同,于是他决定另起炉灶,打造一个新的区块链平台,目标

  • 我是斯卡拉诺布。 我目前尝试使用specs2为基于Play(Scala)的web应用程序创建功能测试。示例本身很简单,即: 我想实现的是为每个示例提供一组定义的测试数据,其中一些数据已经保留在数据库中。因此,我需要围绕每个示例进行设置和拆卸方法,以准备用例类,用适当的数据填充它并保留其中的一些数据,以便该示例可以从定义的数据库状态开始。最终,我想要一个插件机制,其中插件为一组示例定义了测试数据(将

  • 问题内容: 我的Spring-Boot-Mvc-Web应用程序在文件中具有以下数据库配置: 这是我所做的唯一配置。我在任何地方都没有进行任何其他配置。尽管如此,Spring和子系统会在每次Web应用程序运行时自动重新创建数据库。即在系统运行时重新创建数据库,而在应用程序结束后它包含数据。 我不了解此默认值,并期望它适合测试。 但是,当我开始运行测试时,我发现数据库仅重建一次。由于没有按预定义的顺序