2017-03-17 101 views
0

因此,我們在我們相當新鮮的Angular2項目中引入了Cucumber + Gherkin來探索e2e測試。我們決定在JS中編寫步驟定義。我試圖在步驟定義中相當通用。 這就是我想實現:黃瓜+小黃瓜:將自然語言解析爲布爾值

我們有

this.Then(/^I should see (.*) on the page$/, function(componentName, callback) { expect(element(by.id(componentName)).isPresent()).to.eventually.be.true; setTimeout(callback, 1000); });

我想也允許的形式定義:

Then I should not see Results on the page

來表示一定元素不應該被顯示。任何優雅的方式,甚至可以使用我可以使用的工具?文檔和谷歌搜索只給了我的東西,其中包括true/false的說明。我有一種感覺,c'n'p會使我們的步驟定義快速發展,並且使維護變得不必要的困難,除非我們事先弄清楚這種事情。 阻止我,如果你認爲這是一個愚蠢的想法,如果是的話,請告訴我爲什麼。

回答

1

您可以在步驟中捕獲關鍵字'not',並在步驟實施中實施兩條路徑,並選擇正確的條件。

但是,我會這樣做,而不是接受兩個步驟。這將使您的代碼更易於閱讀,因此不易出錯。

我會努力完成步驟,將執行委託給一個輔助類。助手類可以有兩種方式,正面情況和負面情況。它還可以處理之類的東西,你似乎有超時等做

重新編寫代碼,我會嘗試有這樣的事情:

this.Then(/^I should see (.*) on the page$/, function(componentName) { 
    isPresent(componentName); 
    }); 

和負情況下

this.Then(/^I should not see (.*) on the page$/, function(componentName) { 
    isNotPresent(componentName); 
    }); 

我不是流利的JavaScript所以這可能不是JavaScript的方式。但我會努力將潛在的常見細節推送給幫手,並儘量減少Gherkin和JavaScript之間所需的膠水代碼。

+0

這聽起來像合理的中間地帶。謝謝! – jasper