确保在此Mocha测试中调用done()回调

时间:2017-10-10 20:41:41

标签: node.js node-modules nodejs-stream

看着其他问题,无法真正找到问题的原因。我正在尝试使用mocha进行测试。

it("Should not do the work",function(done) {
  axios
    .post("x/y",{ id:a2 })
    .then(function(res) {
      assert(false,"Should not do the work");
      done();
    })
    .catch(function(res) {
      assert.equal(HttpStatus.CONFLICT,res.status);
      done();
    });
});

it("Should do the work",function(done) {
  axios
    .post("/x/y",{ id: a1 })
    .then(function(res) {
      done();
    })
    .catch(done);
});

结果是:

√ Should not do the work (64ms)
1) Should do the work
1 passing (20s)
1 failing

1) Error: Timeout of 20000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves.

增加超时不起作用。

1 个答案:

答案 0 :(得分:0)

别忘了你可以简单地return摩卡的承诺,它会相应地处理它。在您的第一个示例中,您确定这些块实际上已执行吗?

执行断言可能会导致异常,这可能会破坏您尝试做的事情。如果您的诺言库支持它,您可以随时:

it("Should not do the work",function(done) {
 axios.post("x/y",{ id:a2 })
  .then(function(res) {
    assert(false,"Should not do the work");
  })
  .catch(function(res) {
    assert.equal(HttpStatus.CONFLICT,res.status);
  })
  .finally(done);
});

确保无论如何都应该这样做。

更好:

it("Should not do the work",function() {
  return axios.post("x/y",{ id:a2 })
    .then(function(res) {
      assert(false,"Should not do the work");
    })
    .catch(function(res) {
      assert.equal(HttpStatus.CONFLICT,res.status);
    })
});

注意捕获中的断言和断言。更好的计划可能是异步:

it("Should not do the work", async function() {
  var res = await axios.post("x/y",{ id:a2 })

  assert.equal(HttpStatus.CONFLICT,res.status);
});