2012-05-10 2 views
0

Я использую Jasmine для проверки кода. Все работает нормально, за исключением последнего утверждения. Кто-нибудь может мне помочь?Жасмин: Почему мое утверждение не выполнено в моем обратном вызове

var mongoose = require("mongoose") 
    , db = mongoose.connect('mongodb://localhost/database') 
    , Schema = mongoose.Schema;; 


describe('Lockmanager', function() { 

    var status; 

    var Test = new Schema({ 
    name: String 
    }); 
    var testModel = mongoose.model('Test', Test); 
    var LockManager = require('locks').buildLockManager().getManager(testModel, 10000); 

    var newTestModel = new testModel({ 
    name: "Test" 
    }); 

    it('should set a lock on an arbitrary mongoose model', function() { 

    this.after(function() { 
     testModel.remove({}, function(err, numAffected) { 
     status = 'collectionRemoved'; 
     }); 
    }); 

    runs(function() { 
     newTestModel.save(function(err) { 
     expect(err).toBeNull(); 
     status = 'hasBeenSaved'; 
     }); 
    }); 
    waitsFor(function() { 
     return status == 'hasBeenSaved'; 
    }); 

    runs(function() { 
     LockManager.requestLock(newTestModel._id, function(err, response) { 
     expect(err).toBeNull(); 
     status = 'readyToBeReleased'; 
     }); 
    }); 
    waitsFor(function() { 
     return status == 'readyToBeReleased'; 
    }); 

    runs(function() { 
     LockManager.releaseLock(newTestModel._id, function(err) { 
     expect(err).toBeNull(); 
     status = 'readyToBeDeleted'; 
     }); 
    }); 

    waitsFor(function() { 
     return status == 'readyToBeDeleted'; 
    }) 

    }); 

    it('should delete all test entries after the test', function() { 

    waitsFor(function() { 
     return status == 'collectionRemoved'; 
    }); 

    runs(function() { 
     testModel.find({}, function(err, res) { 
     expect(res.length).toEqual(0); 
     status = 'allDone'; 
     }); 
    }); 

    /*** This waitsFor fixed the problem ***/ 
    waitsFor(function() { 
     return status == 'allDone'; 
    }); 

    }); 

}); 

В результате журнал это:

жасмин-узел спецификации/lockmanager.spec.js Замок для '4fabcae0b563859269000001' была приобретена. .Released lock для '4fabcae0b563859269000001'. ,

Законченный в 0,031 секунд 2 теста, 3 утверждений, 0 сбоями

Это было выполнено.

ответ

0

Оказалось, что после последних «прогонов» мне понадобилось еще одно «ожидание», чтобы убедиться, что утверждение было полностью выполнено до того, как результаты были показаны. О, и newTestModel должен был быть testModel в функции after-function.

Измененный код в исходном вопросе.

Смежные вопросы