diff --git a/packages/embark-test-runner/src/reporter.js b/packages/embark-test-runner/src/reporter.js
index <HASH>..<HASH> 100644
--- a/packages/embark-test-runner/src/reporter.js
+++ b/packages/embark-test-runner/src/reporter.js
@@ -55,7 +55,14 @@ class EmbarkSpec extends Base {
       if (self.txDetails) {
         self.embarkEvents.request('contracts:contract', receipt.className, (contract) => {
           if (contract) {
-            self.contracts.push(contract);
+            let index = self.contracts.findIndex(c => c.className === contract.className);
+            // It's possible to deploy the same contract multiple times per test, so we need
+            // to make sure we replace the existing one with the new one.
+            if (index > -1) {
+              self.contracts[index] = contract;
+            } else {
+              self.contracts.push(contract);
+            }
             self.addressToContract = getAddressToContract(self.contracts, self.addressToContract);
           }
         });
@@ -145,7 +152,6 @@ class EmbarkSpec extends Base {
 
     runner.on('test', function() {
       self.stats.test.gasUsed = 0;
-      self.contracts = [];
     });
 
     runner.on('pass', function(test) {
fix(@embark/test-runner): make `--tx-details` option work again

In <URL> of deployed contracts
after every test, making it practically impossible for Embark to find
matching contracts for any transactions, because contracts aren't necessarily
redeployed per spec, resulting in no additional transaction logs whatsoever.

This commit ensures that the memory is never erased and at the same time
ensures it's not leaking infinitely in case multiple contracts are
deployed multiple times in the same process over several specs.