我有一份合同如下 -
文件名:dummycontrat.sol
val dayPrices = Transformations.switchMap(DoubleTrigger(code, nbDays)) {
dbManager.getDayPriceData(it.first, it.second)
}
我有以下测试文件 -
FileName:test / TestDummyContract.sol
pragma solidity ^0.4.17;
contract DummyContract {
function fetchRandomNumber() public pure returns(uint) {
uint res = 10;
return res;
}
}
我运行命令 -
pragma solidity ^0.4.17;
import "truffle/Assert.sol";
import "truffle/DeployedAddresses.sol";
import "../contracts/dummycontract.sol";
contract TestDummyContract {
function testRandomNumberNew() public {
DummyContract dummyContract = new DummyContract();
uint randomNumber = dummyContract.fetchRandomNumber();
Assert.equal(randomNumber, 10, "Number is not 10");
}
function testRandomNumberDeployed() public {
DummyContract dummyContract = DummyContract(DeployedAddresses.DummyContract());
uint randomNumber = dummyContract.fetchRandomNumber();
Assert.equal(randomNumber, 10, "Number is not 10");
}
}
第一次测试通过而第二次测试错误。 truffle compile && truffle migrate --reset --network dev && truffle test --network dev test/TestDummyContract.sol
命令的日志如下 -
truffle test
任何人都可以解释这里的问题是什么吗?我在OSX上为网络运行Ganache工具。
答案 0 :(得分:1)
DeployedAddresses.DummyContract()
失败,因为只有包含在Truffle部署配置中的合同可供DeployedAddresses
使用。来自Project System Documentation:
您已部署的合同的地址(即作为迁移的一部分部署的合同)可通过truffle / DeployedAddresses.sol库获得。这是由Truffle提供的,并在每个套件运行之前重新编译和重新链接,以提供Truffle的洁净室环境测试。该库以以下形式提供所有已部署合同的功能:
DeployedAddresses.<contract name>();
要解决您的问题,您需要在/ migrations下创建部署配置(或者如果您有,则添加到现有配置)。例如:
<强> 2_deploy_contracts.js 强>:
var DummyContract = artifacts.require("dummycontract");
module.exports = function(deployer) {
deployer.deploy(DummyContract);
};
添加该配置,重新运行truffle migrate --reset
,然后您的测试就可以了。