Mocha的典型工作流程是:
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
});
});
考虑到Mocha的格式,看起来这是测试我的数据库同时保留每个测试名称的唯一方法。
还有另一种方法可以测试:(a)正确标记所有测试,(b)要求每条记录只读一次吗?
答案 0 :(得分: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();
});
});
您可以在每个测试中进行迭代,但由于您只想读取每个记录一次而不将其保留在内存中,因此将其加载到before hook中应该效果最佳。