0

次のテストはこれを行うための最良の方法ですか、またはこれを改善できますか (そして Step の依存関係を削除します)?

私は特に、各「ステップ」関数が前の実行のテストを次の実行の呼び出しと混同していることを懸念しています。(つまり、壊れやすいカットアンドペースト)

(参照:非同期 Mocha テスト (NodeJS) を順番に実行するにはどうすればよいですか? )

  it('should run an update', function(done) {
    var db = new database.Database();
    var sess = new session.Session(db);
    Step(
      function createTable() {
        sess.exec('create table customers (id integer primary key auto_increment, name varchar, age integer)', this);
      },
      function insertCustomer1(err, message) {
        assert(!err, err);
        assert.equal("Table created.", message);
        sess.exec('insert into customers (name, age) values ("james", 41)', this);
      },
      function insertCustomer2(err, message) {
        assert(!err, err);
        assert.equal("1 row inserted.", message);
        sess.exec('insert into customers (name, age) values ("thomas", 19)', this);
      },
      function updateCustomer1(err, message) {
        assert(!err, err);
        assert.equal("1 row inserted.", message);
        sess.exec('update customers set age = 42 where name = "james"', this);
      },
      function end(err, message) {
        assert(!err, err);
        assert.equal("1 row updated.", message);
        done();
      }

    );
  });
4

1 に答える 1

1

コンフレーションの問題を解決するには、次のようなコードを記述できます。

Step(
  function createTable() {
    var next = this;
    sess.exec('create table customers (id integer primary key auto_increment, name varchar, age integer)', function (err, message) {
      assert(!err, err);
      assert.equal("Table created.", message);

      next();
    });
  },
  function insertCustomer1() {
    var next = this;
    sess.exec('insert into customers (name, age) values ("james", 41)', function (err, message) {
      assert(!err, err);
      assert.equal("1 row inserted.", message);

      next();
    });
  },

var next = thisStep はthis非同期ステップのコールバックとして使用され、sess.exec の呼び出しで正しくバインドされないため、設定する必要があると思います。それが解決策である場合 (私の意見では、ボイラープレートが少ない方が良い)、async#seriesの使用を検討することができます。

于 2012-12-19T19:40:29.993 に答える