mocha 4退出标志,节点和承诺被拒绝

时间:2017-11-12 12:45:30

标签: javascript node.js mocha

好吧,从mocha版本4开始,你必须在mocha之后放置标志--exit ,如果你希望你的节点在测试运行后停止。 所以现在取决于我实现集成测试的方式,我有两种行为,两者都不是我想要的。

第一种方式

it('User exists?', function(done){
  console.log(index++ +' - Verify if user already exists');

  chai.request(app)
      .get('/api/users/exists?value='+createdUser.userName)
      .set('Cookie', createdCookie)
      .then(function(res){
        if(trace)console.log(res.body);
          expect(res).to.be.status(200);
          expect(res.body.isValid).to.be.true;
          done();
      }).catch(function(error){
          logMessage(error,done);
  });
})

测试将运行,节点将停止。但如果我有一个"期待"错误,我的测试将在intellij中为绿色。 (注意done()的存在,然后是内部块和catch)

控制台中出现

错误:

(node:30824) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): AssertionError: expected false to be true
(node:30824) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.

第二种方式

it('User exists?', function(){
  console.log(index++ +' - Verify if user already exists');

  return chai.request(app)
      .get('/api/users/exists?value='+createdUser.userName)
      .set('Cookie', createdCookie)
      .then(function(res){
        if(trace)console.log(res.body);
          expect(res).to.be.status(200);
          expect(res.body.isValid).to.be.true;
      }).catch(function(error){
          logMessage(error);
  });
})

测试将运行,节点不会停止。如果我有一个"期待"错误,我的测试将在intellij中显示为红色(预期行为)。

这是我从intellij运行test的行命令:

/opt/node-v8.7.0-linux-x64/bin/node /home/bryan/stack/stack_server/node_modules/mocha/bin/_mocha --exit --ui bdd --reporter /home/bryan/.IntelliJIdea2017.2/config/plugins/NodeJS/js/mocha-intellij/lib/mochaIntellijReporter.js /home/bryan/stack/stack_server/test/api/user/user.controller.js --grep "User controller tests "

我想要的是节点通常在测试运行后停止,intellij在出现错误时显示红色,在没有错误时显示绿色。

功能logMessage

function logMessage(error,done){
    console.log('Promise rejected');
    console.log(error.message);
    if(trace) console.log(error);
    done();
    throw error;
}

注意:如果我使用"返回"

,已从功能中删除

1 个答案:

答案 0 :(得分:0)

解决方案是

it('User exists?', function(done){
  console.log(index++ +' - Verify if user already exists');

  chai.request(app)
      .get('/api/users/exists?value='+createdUser.userName)
      .set('Cookie', createdCookie)
      .then(function(result){
        if(trace)console.log(result.body);
          expect(result).to.be.status(200);
          expect(result.body.isValid).to.be.true;
      }).then(done,done)
})

解释here

我做了什么:

  1. 删除内部块
  2. 删除捕获
  3. 添加(完成,完成)