katowulf / mockfirebase

Firebase mock library for writing unit tests (experimental)
157 stars 40 forks source link

Infinite loop when setting keys in .transaction()'s onComplete-function #78

Closed msiebuhr closed 9 years ago

msiebuhr commented 9 years ago

I have an app where I do a transaction and then proceed to update some keys in another end of the database to match (I know; foreign keys in a document store).

The code below works on a real Firebase, but enters an infinite loop where this._defer(...) inside MockFirebase.transaction() is called infinitely when using mockfirebase:

var mockFirebase = new (require('mockfirebase').MockFirebase)();
mockFirebase.child('rooms/roomid').transaction(function (cur) {
    return undefined; // Return whatever - an actual value cause same result
}, function (err, committed, snapshot) {
    var k = snapshot.key();
    // Commenting out this write removes infinite loop
    mockFirebase.child('users/userid/roomId').set(k, function () {
        done();
    });
});

(Adding console.log('MF.transaction._defer', (new Error()).stack); just inside the deferred function shows stack ending in the queue-logic somewhere).

msiebuhr commented 9 years ago

After making a local fork to investigate, I found the issue had been fixed when running on master (commit 31bfa7c1c342d491dfcfd3edebcad75d776dfd32, I presume).

Would it be too much bother to push a new release containing this fix soon-ish?

bendrucker commented 9 years ago

0.10.3 is on its way up now

msiebuhr commented 9 years ago

Confirmed fixed in 0.10.3. Thanks a lot!