Contrato no encontrado durante la prueba de trufa

Creé e implementé dos contratos con éxito (con confirmación) usando truffle migrateasí:

module.exports = function(deployer) {
    deployer.deploy(ReentrancyPot).then(async () => {
        deployer.deploy(ReentrancyAttack, ReentrancyPot.address);
    })
}

El segundo contrato tiene una dependencia del primero como tal (extracto de ReentrancyAttack.sol)

contract ReentrancyAttack {
    ReentrancyPot public pot;

    function ReentrancyAttack (address _pot) public {
        pot = ReentrancyPot(_pot);
    }
}

Estoy usando una prueba para el primer contrato y es exitosa, sin embargo, el segundo contrato se muestra como no implementado ( truffle.jsestá configurado para apuntar al puerto 8545)

var ReentrancyPot = artifacts.require("./ReentrancyPot.sol");
var ReentrancyAttack = artifacts.require("./ReentrancyAttack.sol");
var Web3 = require('web3');
var web3 = new Web3(Web3.givenProvider || 'ws://localhost:8545');

require('chai')
 .use(require('chai-as-promised'))
 .should();

contract('ReentrancyPot / ReentrancyAttack', function(accounts) {

    it("pot should support deposits and withdrawals", async () => {
        let pot = await ReentrancyPot.deployed();
        let attack = await ReentrancyAttack.deployed();
    })
})

Recibo el siguiente error después de ejecutar truffle test:

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

Respuestas (1)

Lo que quieres es:

module.exports = function(deployer) {
    deployer.then(async () => {
        await deployer.deploy(ReentrancyPot);
        var reentrancyPotInstance = await ReentrancyPot.deployed();
        await deployer.deploy(ReentrancyAttack, reentrancyPotInstance.address)
    });
}
Eso me deja con el siguiente problema al ejecutar truffle migrate: TypeError: No se puede leer la propiedad 'dirección' de undefined en deployment.deploy.then (/Users/p/Dev/experimental/solidity-nemesis/tests/solidity/migrations/2_contract_migration.js: 8:65) en /usr/local/lib/node_modules/truffle/build/webpack:/~/truffle-deployer/src/deferredchain.js:20:1 en <anónimo> en process._tickCallback (internal/process/next_tick .js:118:7)
mi culpa ... No recordaba bien que deployment.deploy no devuelve la instancia. Déjame reescribir la respuesta...
La respuesta está actualizada. Por cierto... puedes usar await para una mejor legibilidad.
Por cierto... puedes ahorrarte el problema chai-as-promisedy hacer que tus pruebas sean más legibles y compactas si también usas async/await en tus pruebas.
¡Muchas gracias! Lo siguiente funcionó: deployment.deploy(ReentrancyPot).then(async () => { let reentrancyPotInstance = await ReentrancyPot.deployed(); await deployment.deploy(ReentrancyAttack, reentrancyPotInstance.address) });
Utilizo async / await en mis pruebas, desafortunadamente se requirió chai debido a un problema de versión (si no recuerdo mal).