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)
Was steht ContractA
im 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 ...
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.
Der Nomade