2016-06-10 102 views
4

與此問題相關:How can I create conditional test cases using Protractor? - 我很好奇這些場景是否有合法(記錄)的答案,因爲我無法得到直接的答案。量角器/茉莉花條件測試案例

雖然鏈接問題中發佈的ignore解決方案有效,但在風格上我並不喜歡它。乍一看,它看起來像你忽略/跳過規範。

此外,我問這個問題Gitter - 下面的代碼是不好的做法?

if(questionAnswer == "Yes") { 
    it('should display another question', function() { 
     // code 
    }); 
} 

我對收到的Gitter從別人量角器隊的答案是相當含糊:

這可能會導致片狀測試...我不覺得有什麼,說,這是不不好的做法。如果它在爲你工作,那就用它來運行。

我對這個答案並不滿意,因爲他從「可能是片狀的」開始......這對我來說聽起來並不穩定。我看到的唯一方法是創建條件規範爲正常的內部,並創建一個任意斷言捕捉else方案,即:

it('should display another question', function() { 
    if(questionAnswer == "Yes") { 
     expect(question2.isDisplayed()).toBe(true); 
    } 
    else { 
     expect(true).toBe(true); 
    } 
}); 

但後來我自動添加額外的測試情況下,當它的只需要50%的時間。我知道這是一個小問題,但它真的困擾我。

上面的代碼是我目前面臨的場景 - 如果最後一個規範回答「是」,我需要爲下一個問題運行一個附加規範。如果不是,那就是我的測試結束了。是否真的沒有官方有條件地運行茉莉花/量角器中的規格?

+0

'questionAnswer'在做什麼?它跟蹤代碼的狀態嗎?考試?環境? –

+0

這只是一個反映其帳戶特權的布爾值。如果他們有能力,那麼我有另一個測試用例。如果不是,那麼我不會。 – Gunderson

+0

因此,它是影響您正在測試的代碼的上下文/狀態?也就是說,對於*特權帳戶,代碼的行爲有所不同*? –

回答

6

在這些情況下,我使用了所謂的環境。通常,上下文用於表示狀態更改,這會影響您正在測試的代碼的行爲。

儘管在Jasmine中沒有明確提供,但它們確實存在於其他BDD樣式的測試框架中,如Rspec(related reference)。通常,context只是describe的別名。

所以在茉莉,我會用describe和構建我的測試如下:

describe('someMethod', function() { 
    describe('when a privileged account', function() { 
     beforeEach(function() { 
      questionAnswer = "Yes"; 
      someMethod(); 
     }); 

     it('should do something', function() { 
      // expectation 
     } 
    }); 

    describe('when not a privileged account', function() { 
     beforeEach(function() { 
      questionAnswer = "No"; 
      someMethod(); 
     }); 

     it('should do something else', function() { 
      // expectation 
     } 
    }); 
); 

我避免「條件測試」。我寧願運行更多的測試以確保我已經耗盡了所有的代碼路徑。另外,我發現測試更具可讀性,這是BDD式測試的目標之一。

最後,爲測試添加邏輯是人們爲什麼要走測試測試的荒謬道路的一個原因。然後測試測試測試的測試。然後...

+1

這是有道理的,你是正確的避免條件/邏輯。我想我以爲我試圖讓測試更加簡潔和靈活,但我真的很懶惰:)。絕對可以覆蓋所有場景。謝謝。 – Gunderson