Wie kann man einen Vertrag testen, der zuerst die Adresse eines zuvor bereitgestellten Vertrags benötigt?

Ich habe Probleme mit meinen JS-Tests für einen Vertrag, der zuerst von der Bereitstellung eines anderen Vertrags abhängt.

Vertrag A muss bereitgestellt werden und dann seine Adresse an Vertrag B übergeben .

Ich konnte bereits erfolgreich migrieren, versuche aber immer noch, die Tests zu bestehen.

Wie kann ich meine JS-Tests reparieren und richtig instanziieren/bereitstellen?

Hier ist mein Testcode:

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

Bereitstellungsskript:

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

Diesen Fehler erhalten:

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

Antworten (3)

Was steht ContractAim Bereitstellungsskript? Ich denke, Sie brauchen stattdessen die Adresse des instanziierten Vertrags.

Versuchen:

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

( ContractA=> contractA)

Sie wollen nicht tx.address. Verwenden:

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

Stellen Sie sicher, dass VertragB die Adresse von VertragA in seine Initialisierungsfunktion übernimmt. Lassen Sie mich wissen, ob das funktioniert, das stammt aus einem Trüffelprojekt, an dem ich gearbeitet habe ...

Ich habe dies bereits getan. Siehe mein Bereitstellungsskript oben. Es ist der JS-Testteil, bei dem ich Hilfe brauche.

Wenn Sie Verträge verwenden möchten, die automatisch von Testsuits bereitgestellt werden, warum rufen Sie sie nicht einfach so ab:

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

Wenn die Bereitstellung gut gelaufen ist, sollte dies funktionieren. Oder Sie können diese Verträge ignorieren und erneut im Test einsetzen, wenn Sie einen Grund dazu haben.