2013-10-21 155 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