INCLUSIVE TESTS

only()方法相反,.skip()方法可以用于跳过某些测试测试集合和测试用例。所有被跳过的用例都会被标记为pending用例,在报告中也会以pending用例显示。下面是一个跳过整个测试集的例子。

  1. describe('Array', function () {
  2. describe.skip('#indexOf', function () {
  3. // ...
  4. })
  5. })

或者指定跳过某一个测试用例:

  1. describe('Array', function () {
  2. describe('#indexOf()', function () {
  3. it.skip('should return -1 unless present', function () {
  4. // this test will not be run
  5. })
  6. it('should return the index when present', function () {
  7. // this test will be run
  8. })
  9. })
  10. })

最佳实践:使用.skip()方法来跳过某些不需要的测试用例而不是从代码中注释掉。

有些时候,测试用例需要某些特定的环境或者一些特殊的配置,但我们事先是无法确定的。这个时候,我们可以使用this.skip()[译者注:这个时候就不能使用箭头函数了]根据条件在运行的时候跳过某些测试用例。

  1. it('should only test in the correct environment', function () {
  2. if(/* check the environment */) {
  3. // make assertions
  4. } else {
  5. this.skip()
  6. }
  7. })

这个测试在报告中会以pending状态呈现。为了避免测试逻辑混乱,在调用skip函数之后,就不要再在用例函数或after钩子中执行更多的逻辑了。

下面的这个测试和上面的相比,因为没有在else分支做任何事情,当if条件不满足的时候,它仍然会在报告中显示passing。

  1. it('should only test in the correct environment', function () {
  2. if (/* check test environment */) {
  3. // make assertion
  4. } else {
  5. // do nothing
  6. }
  7. })

最佳事件:千万不要什么事情都不做,一个测试应该做个断言判断或者使用skip()

我们也可以在before钩子函数中使用.skip()来跳过多个测试用例或者测试集合。

  1. before(function () {
  2. if(/* check test environment */) {
  3. // setup mode
  4. } else {
  5. this.skip()
  6. }
  7. })

Mocha v3.0.0之前,在异步的测试用例和钩子函数中是不支持this.skip()的。