0

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 を読み取っているとします。このようにテストを構成したくないことは間違いありません。そうしないと、アイテムごとにすべてのレコードを1回読み取ることになります。

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) 各レコードを一度だけ読み取る必要があるテストの別の方法はありますか?

4

1 に答える 1

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

編集:すべてのレコードをメモリにロードせずに、各レコードを反復処理することもできます(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();
    });
});

各テストで反復することもできますが、メモリに保持せずに各レコードを 1 回だけ読み取りたいため、before フックにロードするのが最適です。

于 2013-10-21T21:48:19.367 に答える