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';
    });

  });

});

結果のログは次のとおりです。

jasmine-node spec /lockmanager.spec.js'4fabcae0b563859269000001'のロックを取得しました。。「4fabcae0b563859269000001」のロックを解除しました。。

0.031秒で終了2つのテスト、3つのアサーション、0の失敗

これは実行されました。

4

1 に答える 1

0

結果が表示される前にアサーションが完全に実行されたことを確認するために、最後の「実行」の後に別の「waitsFor」が必要であることが判明しました。ああ、そしてnewTestModelはafter関数のtestModelでなければなりませんでした。

元の質問のコードを変更しました。

于 2012-05-10T14:32:31.043 に答える