Mocha 测试用例不等待完成

Posted

技术标签:

【中文标题】Mocha 测试用例不等待完成【英文标题】:Mocha tests cases not waiting before to complete 【发布时间】:2017-06-15 12:21:06 【问题描述】:

我正在 Nodejs 中使用 mocha 编写测试用例,并希望在运行测试之前重置数据库数据。我使用 Knex 作为查询生成器来执行查询。

我写了以下逻辑:

describe('Activities:', function() 

  before(funtion()
   activityDBOperations.deleteAll()
   .then(function()
       // all records are deleted
   );
  );

  it('it should add a record into Activities table: multiple time activity',  function(done) 
    activityDBOperations.addRecord(requestParams)
        .then(function(data) 
            expect(data.length > 0).to.equal(true);
            done();
        );
  );
);

问题是测试用例开始执行而不是等待 deleteAll 操作完成。我的理解是由于 deleteAll 正在返回承诺,由于承诺的异步性质,程序执行向前推进。

我如何确保只有在 deleteAll 完成后才运行测试用例?

【问题讨论】:

【参考方案1】:

或者为您的before 钩子提供回调并在then 中调用它:

before(function(done) 
   activityDBOperations.deleteAll()
     .then(function() 
         // all records are deleted
         done();
     );
);

或者,根据Mocha docs,只需从before返回一个承诺:

before(function() 
   return activityDBOperations.deleteAll();
);

【讨论】:

这就是我告诉你的。【参考方案2】:

添加 return 语句,以便实际返回 Promise。

【讨论】:

我希望 it 在那之后工作 :( ,承诺正在返回。 这就是我告诉你的。 也许你下次应该提供一个例子。 @JasonLivesay

以上是关于Mocha 测试用例不等待完成的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的测试用例通过但断言实际上在 mocha 中失败

selenium+BeautifulReport+python自动化+用例不通过的时候发送邮件

公司新来的阿里P6被辞退了,因为写测试用例不规范,躺平的悲哀?

如何在多个文件中设置mocha测试用例的执行顺序

当我循环测试用例时,为啥 Mocha 会跳过重新分配变量?

Symfony2功能测试用例不包括自定义依赖注入配置参数