diff --git a/src/transaction_builder.js b/src/transaction_builder.js
index e284d63..6611bca 100644
--- a/src/transaction_builder.js
+++ b/src/transaction_builder.js
@@ -118,6 +118,7 @@ TransactionBuilder.prototype.build = function(allowIncomplete) {
   if (!allowIncomplete) {
     assert(this.tx.ins.length > 0, 'Transaction has no inputs')
     assert(this.tx.outs.length > 0, 'Transaction has no outputs')
+    assert(this.signatures.length > 0, 'Transaction has no signatures')
     assert.equal(this.signatures.length, this.tx.ins.length, 'Transaction is missing signatures')
   }
 
diff --git a/test/fixtures/transaction_builder.json b/test/fixtures/transaction_builder.json
index 69c1fea..8946805 100644
--- a/test/fixtures/transaction_builder.json
+++ b/test/fixtures/transaction_builder.json
@@ -42,72 +42,62 @@
     "build": [
       {
         "exception": "Transaction has no inputs",
-        "hex": "",
+        "inputs": [],
         "outputs": [
           {
-            "script": "",
+            "script": "OP_DUP OP_HASH160 aa4d7985c57e011a8b3dd8e0e5a73aaef41629c5 OP_EQUALVERIFY OP_CHECKSIG",
             "value": 1000
           }
         ]
       },
       {
         "exception": "Transaction has no outputs",
-        "hex": "",
         "inputs": [
           {
-            "hash": "",
-            "index": 0
+            "index": 0,
+            "prevTx": "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+            "privKeys": []
           }
-        ]
+        ],
+        "outputs": []
       },
       {
         "exception": "Transaction has no signatures",
-        "hex": "",
         "inputs": [
           {
-            "hash": "",
-            "index": 0
+            "index": 0,
+            "prevTx": "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+            "privKeys": []
           }
         ],
         "outputs": [
           {
-            "script": "",
+            "script": "OP_DUP OP_HASH160 aa4d7985c57e011a8b3dd8e0e5a73aaef41629c5 OP_EQUALVERIFY OP_CHECKSIG",
             "value": 1000
           }
         ]
       },
       {
         "exception": "Transaction is missing signatures",
-        "hex": "",
         "inputs": [
           {
-            "hash": "",
-            "index": 0
+            "index": 0,
+            "prevTx": "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+            "privKeys": ["KwDiBf89QgGbjEhKnhXJuH7LrciVrZi3qYjgd9M7rFU73sVHnoWn"]
           },
           {
-            "hash": "",
-            "index": 1
+            "index": 1,
+            "prevTx": "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+            "privKeys": []
           }
         ],
         "outputs": [
           {
-            "script": "",
+            "script": "OP_DUP OP_HASH160 aa4d7985c57e011a8b3dd8e0e5a73aaef41629c5 OP_EQUALVERIFY OP_CHECKSIG",
             "value": 1000
           }
-        ],
-        "signatures": [
-          {
-            "wif": "",
-            "index": 0
-          }
         ]
       }
-    ],
-    "fromTransaction": [
-      {
-        "exception": "Transaction contains unsupported script types",
-        "hex": ""
-      }
     ]
   }
 }
diff --git a/test/transaction_builder.js b/test/transaction_builder.js
index 4a7f0ea..36ad20c 100644
--- a/test/transaction_builder.js
+++ b/test/transaction_builder.js
@@ -189,40 +189,43 @@ describe('TransactionBuilder', function() {
       })
     })
 
-    it('throws if Transaction has no inputs', function() {
-      txb.addOutput(privScript, value)
+    fixtures.invalid.build.forEach(function(f) {
+      it('throws on ' + f.exception, function() {
+        f.inputs.forEach(function(input) {
+          var prevTx
+          if (input.prevTx.length === 64) {
+            prevTx = input.prevTx
+          } else {
+            prevTx = Transaction.fromHex(input.prevTx)
+          }
 
-      assert.throws(function() {
-        txb.build()
-      }, /Transaction has no inputs/)
-    })
+          txb.addInput(prevTx, input.index)
+        })
 
-    it('throws if Transaction has no outputs', function() {
-      txb.addInput(prevTxHash, 0)
+        f.outputs.forEach(function(output) {
+          var script = Script.fromASM(output.script)
 
-      assert.throws(function() {
-        txb.build()
-      }, /Transaction has no outputs/)
-    })
+          txb.addOutput(script, output.value)
+        })
 
-    it('throws if Transaction has no signatures', function() {
-      txb.addInput(prevTxHash, 0)
-      txb.addOutput(privScript, value)
+        f.inputs.forEach(function(input, index) {
+          var redeemScript
 
-      assert.throws(function() {
-        txb.build()
-      }, /Transaction is missing signatures/)
-    })
+          if (input.redeemScript) {
+            redeemScript = Script.fromASM(input.redeemScript)
+          }
 
-    it('throws if Transaction has not enough signatures', function() {
-      txb.addInput(prevTxHash, 0)
-      txb.addInput(prevTxHash, 1)
-      txb.addOutput(privScript, value)
-      txb.sign(0, privKey)
+          input.privKeys.forEach(function(wif) {
+            var privKey = ECKey.fromWIF(wif)
 
-      assert.throws(function() {
-        txb.build()
-      }, /Transaction is missing signatures/)
+            txb.sign(index, privKey, redeemScript)
+          })
+        })
+
+        assert.throws(function() {
+          txb.build()
+        }, new RegExp(f.exception))
+      })
     })
   })
 })