【问题标题】:Mocha tests cases not waiting before to completeMocha 测试用例不等待完成
【发布时间】: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 完成后才运行测试用例?

【问题讨论】:

    标签: node.js promise mocha.js


    【解决方案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
    猜你喜欢
    • 1970-01-01
    • 2021-12-08
    • 2019-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-23
    • 2018-07-27
    • 2021-11-30
    相关资源
    最近更新 更多