返回课程

测试中哪里错了?

重要性:5

下面 pow 的测试中哪里错了?

it("Raises x to the power n", function() {
  let x = 5;

  let result = x;
  assert.equal(pow(x, 1), result);

  result *= x;
  assert.equal(pow(x, 2), result);

  result *= x;
  assert.equal(pow(x, 3), result);
});

P.S. 从语法上看,测试是正确的,并且通过了。

该测试展示了开发人员在编写测试时会遇到的一个诱惑。

我们这里实际上有 3 个测试,但它们被布局为一个带有 3 个断言的单个函数。

有时这样写更容易,但如果出现错误,就很难看出哪里出了问题。

如果在复杂的执行流程中出现错误,那么我们需要找出该点的數據。实际上,我们需要**调试测试**。

将测试分解成多个带有清晰输入和输出的`it`块会更好。

像这样

describe("Raises x to power n", function() {
  it("5 in the power of 1 equals 5", function() {
    assert.equal(pow(5, 1), 5);
  });

  it("5 in the power of 2 equals 25", function() {
    assert.equal(pow(5, 2), 25);
  });

  it("5 in the power of 3 equals 125", function() {
    assert.equal(pow(5, 3), 125);
  });
});

我们将单个`it`替换为`describe`和一组`it`块。现在,如果出现故障,我们将清楚地看到数据是什么。

此外,我们可以通过编写`it.only`而不是`it`来隔离单个测试并在独立模式下运行它。

describe("Raises x to power n", function() {
  it("5 in the power of 1 equals 5", function() {
    assert.equal(pow(5, 1), 5);
  });

  // Mocha will run only this block
  it.only("5 in the power of 2 equals 25", function() {
    assert.equal(pow(5, 2), 25);
  });

  it("5 in the power of 3 equals 125", function() {
    assert.equal(pow(5, 3), 125);
  });
});