       equal "#{err}", "Stop saving!"
       deepEqual product.callOrder, @Product.loadingCallOrder.concat([0,1])
       QUnit.start()
+
+test "throwing an error stops a storage operation for an existing record", ->
+  product = new @Product()
+  product.on 'before creating', -> throw "Stop saving!"
+  try
+    product.save (err) =>
+      throw "Failed!"
+  catch err
+    ok product.isNew()
+    equal "#{err}", "Stop saving!"

      # destroy callback 13

asyncTest "new record lifecycle prototype callbacks fire in order", ->

  product = new @Product()

  product.set('foo', 'bar')

  product.save (err) =>

        deepEqual(product.callOrder, @Product.loadingCallOrder.concat(@Product.expectedCallOrder))
        QUnit.start()

asyncTest "throwing an error stops a storage operation for an existing record", ->

  @Product.find 10, (err, product) =>
    product._push(105)
    product.set('foo', 'bar')
    product.on 'before saving', -> throw "Stop saving!"

    try
      product.save (err) =>
