Как протестировать контракт, которому сначала нужен адрес ранее развернутого контракта?

У меня возникли проблемы с моими тестами JS для контракта, которые зависят от развертывания другого контракта в первую очередь.

Контракт A необходимо развернуть, а затем передать его адрес контракту B.

Мне уже удалось успешно выполнить миграцию, но я все еще пытаюсь пройти тесты.

Как исправить мои JS-тесты и правильно создать/развернуть?

Вот мой тестовый код:

beforeEach(async function() {
        let tx = await ContractA.deployed();
        contractB = await ContractB.deployed(tx.address);
    });

Сценарий развертывания:

module.exports = function(deployer) {
    deployer.deploy(ContractA).then(function() {
        deployer.deploy(ContractB, ContractA.address);
    });
};

Получение этой ошибки:

Error: ContractB has not been deployed to detected network (network/artifact mismatch)

Ответы (3)

Что находится ContractAв сценарии развертывания? Я думаю, вам нужен адрес созданного контракта.

Пытаться:

module.exports = function(deployer) {
    deployer.deploy(ContractA).then(function(contractA) {
        deployer.deploy(ContractB, contractA.address);
    });
};

( ContractA=> contractA)

Вам не нужен tx.address. Использовать:

deployer.deploy(contractA).then(function(){
    deployer.deploy(contractB, contractA.address)});

Убедитесь, что ContractB принимает адрес ContractA в своей функции инициализации. Дайте мне знать, если это сработает, взял это из проекта трюфелей, над которым я работал...

Я уже сделал это. См. мой сценарий развертывания выше. Мне нужна помощь в тестовой части JS.

Если вы хотите использовать контракты, автоматически развертываемые тестовым набором, почему бы просто не получить их следующим образом:

beforeEach(async function() {
    let contractA = await ContractA.deployed();
    let contractB = await ContractB.deployed();
});

Если развертывание прошло успешно, то это должно сработать. Или вы можете проигнорировать этот контракт и повторно развернуть их в тесте, если у вас есть причина.