0

看其他问题,实在找不到问题的原因。我正在尝试使用摩卡进行测试。

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.

增加超时不起作用。

4

1 回答 1

0

不要忘记你可以return在 Mocha 中简单地做出一个承诺,它会相应地处理它。在您的第一个示例中,您确定这些块已实际执行吗?

进行断言可能会导致异常,这可能会破坏您正在尝试做的事情。如果你的 Promise 库支持它,你总是可以:

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

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

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

  assert.equal(HttpStatus.CONFLICT,res.status);
});
于 2017-10-10T20:48:58.260 回答