Cucumber + Gherkin:将自然语言解析为布尔值

时间:2017-03-17 10:09:55

标签: cucumber gherkin cucumberjs

因此,我们刚刚介绍了Cucumber + Gherkin,以便在我们相当新鲜的Angular2项目中探索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' p会使我们的步骤定义超快速增长并且不必要地进行维护。 如果您认为这是一个愚蠢的想法,请阻止我,如果是这样,请告诉我原因。

1 个答案:

答案 0 :(得分: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之间所需的胶水代码。