2016-03-15 95 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