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

Cucumber+Gherkin: Parse natural language to boolean

因此,我们刚刚引入了 Cucumber + Gherkin 来探索我们相当新鲜的 Angular2 项目中的端到端测试。我们决定用 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' 将使我们的步骤定义增长得非常快,并使维护变得不必要地困难。 如果您认为这是一个愚蠢的想法,请阻止我,如果是,请告诉我原因。

您可以在您的步骤中捕获关键字 'not' 并在您的步骤实施中实施两条路径,条件是选择正确的路径。

但是,我不会那样做,而是接受两个步骤。这将使您的代码更易于阅读,因此更不容易出错。

我会努力使这些步骤成为一行,并将执行委托给助手 class。 helper class 可以有两种方式,正例和负例。它还可以处理您似乎在超时等情况下所做的事情。

重写你的代码,我会尝试这样的:

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.

之间所需的胶水代码