2013-10-21 154 views
0

典型的工作流程與摩卡雲:測試數據庫中的行測試

describe("my test", function(){ 
    it("should calculate X correctly", function(){...}); 
    it("should calculate Y correctly", function(){...}); 
    it("should calculate Z correctly", function(){...}); 
}); 

不過,說我讀X,Y和Z從一個數據庫,在那裏有可能是幾千條記錄。我絕對不希望我的結構試驗這種方式,否則我會爲每個項目一次閱讀每一條記錄:

describe("database test", function(){ 
    it("should calculate X correctly", function(){ 
    // check all X in the database 
    }); 
    it("should calculate Y correctly", function(){ 
    // check all Y in the database 
    }); 
    it("should calculate Z correctly", function(){ 
    // check all Z in the database 
    }); 
}); 

鑑於摩卡的格式,不過,這樣看來,這是唯一的出路測試我的數據庫,同時保留每個測試的名稱。

有另一種方式來測試,將(一)正確標註全部測試和(b)要求每個記錄只能讀取一次?

回答

0

您可以使用一個before鉤子加載所有記錄,然後在每個測試中訪問相同的記錄列表。

describe("database test", function() { 
    var records = []; 
    before(function (done) { 
     // Load records into the variable "records" 
     done(); 
    }); 

    it("should calculate X correctly", function() { 
     // check all X in the database 
    }); 
}); 

編輯:您還可以通過iterate每個記錄(假設你使用jugglingdb或支持它的ORM),無需加載所有記錄到內存:

describe("database test", function() { 
    var someCalculation = 0; 

    before(function (done) { 
     // Only load 100 records at a time. 
     Model.iterate({ batchSize: 100 }, function (singleObject, next, i) { 
      // Do whatever you need to calculate x/y/z. 
      someCalculation++; 
      next(); 
     }, function (err) { 
      // Callback 
      done(); 
     } 
    }); 

    it("should calculate X correctly", function (done) { 
     // Validate/test here. 
     someCalculation.should.be.above(1); 
     done(); 
    }); 
}); 

你可以遍歷在每個測試,但因爲你只希望,而不是保存在內存中,前鉤很好的工作裝一次讀取每個記錄。

+0

的問題是,它是成千上萬的記錄,我不能肯定,他們就都適合在內存中。 –

+0

我編輯了迴應。我仍然在尋找一種更好的方法來完成這一點。比如對於每一次迭代,檢查所有三個「它(」應該......「)方法。 – matth