2016-03-15 51 views
2

我有两个测试(A,B)的简单示例,其中B取决于A正在运行。我如何使用摩卡嵌套测试执行依赖测试

如果我使用的摩卡,我可以嵌套检验B内的:

describe.only('AB:', function() { 

    describe('A', function() { 
     it('A1', function() { 
      assert.equal(1, 2); 
     }); 

     describe('B', function() { 
      it('B1', function() { 
       assert.equal(1, 1); 
      }); 
     }); 
    }); 
}); 

但如果失败,A和B都甚至运行。

这与没有使用嵌套有什么不同?

describe.only('AB:', function() { 

    describe('A&B', function() { 
     it('A1', function() { 
      assert.equal(1, 2); 
     }); 

     it('B1', function() { 
      assert.equal(1, 1); 
     }); 
    }); 
}); 

如果A失败,有什么办法可以跳过B吗?

回答

5

好的,有两个问题,所以我会尽量回答这两个问题。

  1. 有没有办法跳过B如果A出现故障?

    通常你应该编写互不相关的测试。

    有时候测试依赖于某些设置或状态,然后才能正常运行,在这种情况下,最好在before()beforeEach()块中进行设置。如果这些块中的任何一个都失败,则不会运行它们之后的测试。因此你可以在这些块中抛出一个错误,当你建立起来的时候,你知道那个描述块内没有任何测试不起作用。

    describe.only('AB:', function() { 
        var numberUnderTest = 0; 
    
        describe('A&B', function() { 
        it('A1', function() { 
         assert.equal(1, 1 * numberUnderTest); 
        }); 
    
        describe('B', function() { 
         before(function() { 
         if (numberUnderTest === 0) { 
          throw 'cannot divide by zero'; 
         } 
         }); 
    
         it('B1', function() { 
         assert.equal(1, 1/numberUnderTest); 
         }); 
        }); 
        }); 
    }); 
    
  2. 如果我使用的摩卡,我可以在鸟巢测试B A
    [...]
    这怎么比不使用嵌套有什么不同?

    在描述块内嵌套B允许您为B1使用与A1不同的设置,但仍继承A的某些设置。

    describe('A', function() { 
        var numberUnderTest; 
        var anotherNumber; 
    
        beforeEach(function() { 
        numberUnderTest = 1; 
        anotherNumber = 0; 
        }); 
    
        it('A1'), function() { 
        assert.equal(0, anotherNumber * numberUnderTest); 
        }); 
    
        describe('B', function() { 
        before(function() { 
         anotherNumber = 1; 
        }); 
    
        it('B1', function() { 
         assert.equal(1, anotherNumber/numberUnderTest); 
        }); 
        }); 
    }); 
    
+1

谢谢你,我的理解测试应该是独立而这正是我们的单元测试做的,但我们也写在摩卡终端到终端的测试这就是为什么我问这个问题依赖的步骤。 –

+0

那么,据我所知,当一个人直接失败时,你不能告诉Mocha失败。但是作为一种解决方法,您可以使用您在第一次测试期间更新的布尔变量,并在所有引发错误的相关测试前添加'before'块,前提是第一次测试失败。 – t0mppa

+0

@AlisterScott我遇到同样需求的这个问题,为了端到端测试一步一步地运行测试。你有没有想过这个? – rhlsthrm