Javascript Mocha:如何测试一系列异步操作,这些操作必须按顺序进行测试

Javascript Mocha:如何测试一系列异步操作,这些操作必须按顺序进行测试,javascript,node.js,mocha.js,Javascript,Node.js,Mocha.js,下面的测试是实现这一点的最佳方法,还是我可以改进它(并删除步骤依赖关系) 我特别关注的是,每个“步骤”函数都会将前一次执行的测试与下一次执行的调用混为一谈。(即切割和粘贴易碎品) (另见:) 要解决合并问题,您可以编写如下代码: 步骤( 函数createTable(){ var next=这个; sess.exec('create table customers(id integer主键自动递增,name varchar,age integer'),函数(err,message){ 断言(!er

下面的测试是实现这一点的最佳方法,还是我可以改进它(并删除步骤依赖关系)

我特别关注的是,每个“步骤”函数都会将前一次执行的测试与下一次执行的调用混为一谈。(即切割和粘贴易碎品)

(另见:)


要解决合并问题,您可以编写如下代码:

步骤(
函数createTable(){
var next=这个;
sess.exec('create table customers(id integer主键自动递增,name varchar,age integer'),函数(err,message){
断言(!err,err);
assert.equal(“创建了表”,消息);
next();
});
},
函数insertCustomer1(){
var next=这个;
sess.exec('插入客户(姓名、年龄)值(“james”,41)”,函数(错误,消息){
断言(!err,err);
assert.equal(“插入1行”,消息);
next();
});
},
我相信您需要设置
var next=this
,因为Step使用
this
作为异步步骤的回调,并且在对sess.exec的调用中它不会被正确绑定。如果这是一个dealbreaker(在我看来,样板文件越少越好),您可以考虑使用

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

    );
  });