Я пытаюсь разработать некоторые тесты для моего контракта Solidity.У меня есть скрипт compile.js
здесь:
const path = require('path');
const solc = require('solc');
const fs = require('fs-extra');
const buildPath = path.resolve(__dirname, 'build');
fs.removeSync(buildPath);
const campaignPath = path.resolve(__dirname, 'contracts', 'Campaign.sol');
const source = fs.readFileSync(campaignPath, 'utf-8');
const output = solc.compile(source, 1).contracts;
fs.ensureDirSync(buildPath);
for (let contract in output) {
fs.outputJsonSync(
path.resolve(buildPath, contract.replace(':', '') + '.json'),
output[contract]
);
}
Может ли виновник этой утечки памяти в EventEmitter быть где-то в этом коде?Я никогда не сталкивался с этой ошибкой раньше.Я получаю сообщение об ошибке, когда я запускаю свой первый тест, и это мой тестовый файл:
const assert = require('assert');
const ganache = require('ganache-cli');
const Web3 = require('web3');
const web3 = new Web3(ganache.provider());
const compiledFactory = require('../ethereum/build/CampaignFactory.json');
const compiledCampaign = require('../ethereum/build/Campaign.json');
let accounts;
let factory;
let campaignAddress;
let campaign;
beforeEach(async () => {
accounts = await web3.eth.getAccounts();
factory = await new web3.eth.Contract(JSON.parse(compiledFactory.interface))
.deploy({ data: compiledFactory.bytecode })
.send({ from: accounts[0], gas: '1000000' });
await factory.methods.createCampaign('100').send({
from: accounts[0],
gas: '1000000'
});
[campaignAddress] = await factory.methods.getDeployedCampaigns().call();
campaign = new web3.eth.Contract(
JSON.parse(compiledCampaign.interface),
campaignAddress
);
});
describe('Campaigns', () => {
it('deploys a factory and a campaign', () => {
assert.ok(factory.options.address);
assert.ok(campaign.options.address);
});
});
Вторая ошибка, которую я получаю сразу после этой утечки памяти EventEmitter, говорит о том, что мой getDeployedCampaigns()
не является функцией, ноэто ясно, если вы посмотрите на файл Campaign.sol
здесь:
pragma solidity ^0.4.17;
contract CampaignFactory {
address[] public deployedCampaigns;
function createCampaign(uint minimum) public {
address newCampaign = new Campaign(minimum, msg.sender);
deployedCampaigns.push(newCampaign);
}
function getDeployedCampaigns() public view returns (address[]) {
return deployedCampaigns;
}
}