我正在研究一个简单的以太坊合约,它是松露测试对应物,但我遇到的问题是我需要测试来调用合约的旧部署,而不是每次都重新部署它。
在 truffle 文档中,它说在要重新部署合约时应该使用 contract() 函数,而在所有其他情况下应该使用 mocha 的 describe(),但即使使用 describe,geth 客户端也会报告每次重新部署合约。
这是测试:
var md5 = require('md5');
var AuditRecord = artifacts.require("AuditRecord");
describe('AuditRecord', function() {
before(function() {
audit = AuditRecord.at('0x30ad3ceaf3f04696d1f7c8c4fbb9cfe4f7041822');
for (var i = 0; i < 10; ++i) {
if (Math.random() < 0.3) {
audit.enter(i, i, md5("test"), md5("data"), Date.now().toFixed());
} else {
audit.enter(i, i, md5("special_case"), md5("data"), Date.now().toFixed());
}
}
return audit.LogRecord({}, { fromBlock: 0, toBlock: 'latest'});
});
it("should read data", function() {
auditLog = AuditRecord.at('0x30ad3ceaf3f04696d1f7c8c4fbb9cfe4f7041822').LogRecord({}, { fromBlock: 0, toBlock: 'latest'});
auditLog.get(function(err, data) {
console.log("\n\n\n\t.:::: testing lookup:\n")
if (err) {
console.log(err);
return false;
}
for (obj in data) {
console.log("entry: @ " + Date(data[obj].args.timestamp).toString());
console.log("\tuser: " + web3.toAscii(data[obj].args.user));
console.log("\tpatient: " + web3.toAscii(data[obj].args.patient));
console.log("\toperation: " + data[obj].args.operation);
//console.log(JSON.stringify(data[obj].args.));
}
assert(10 < data.length);
});
})
})
该测试的工作原理是它在硬编码地址找到了我之前部署的合约,但由于某种原因,它每次都会在不相关的地址上同时部署 migrations.sol 和 auditrecord.sol。我的目标是每次运行此测试时都参考相同的合同。
有没有办法做到这一点?