Cucumber 黄瓜+;小黄瓜:将自然语言解析为布尔语言

Cucumber 黄瓜+;小黄瓜:将自然语言解析为布尔语言,cucumber,gherkin,cucumberjs,Cucumber,Gherkin,Cucumberjs,所以,我们刚刚引入Cucumber+Gherkin,在我们相当新鲜的Angular2项目中探索e2e测试。我们决定用JS编写步骤定义。我试图在步骤定义中相当通用。 这就是我努力实现的目标: 我们有 this。然后(/^我应该在$/页上看到(.*)函数(componentName,callback){ expect(element(by.id(componentName)).isPresent())to.finally.be.true; setTimeout(回调,1000); }); 我还允许以

所以,我们刚刚引入Cucumber+Gherkin,在我们相当新鲜的Angular2项目中探索e2e测试。我们决定用JS编写步骤定义。我试图在步骤定义中相当通用。 这就是我努力实现的目标:

我们有

this。然后(/^我应该在$/页上看到(.*)函数(componentName,callback){
expect(element(by.id(componentName)).isPresent())to.finally.be.true;
setTimeout(回调,1000);
});

我还允许以下形式的定义:

那么我不应该在页面上看到结果

表示某些元素不应显示。有没有什么优雅的方法,或者我可以使用的内置工具?文档和谷歌搜索只给了我描述中包含
true/false
的东西。我有一种感觉,c'n'p将使我们的step定义快速增长,并使维护变得不必要的困难,除非我们提前解决此类问题。
如果您认为这是一个愚蠢的想法,请阻止我,如果是,请告诉我原因。

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

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

我将努力使步骤成为一行程序,并将执行委托给助手类。helper类可以有两种输入方式,正反两种。它还可以处理一些事情,比如你似乎在超时等

在重新编写代码时,我会尝试这样做:

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之间需要的粘合代码。

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

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

我将努力使步骤成为一行程序,并将执行委托给助手类。helper类可以有两种输入方式,正反两种。它还可以处理一些事情,比如你似乎在超时等

在重新编写代码时,我会尝试这样做:

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的方式。但我会努力将潜在的公共细节推给助手,并尽量减少小黄瓜和JavaScript之间所需的粘合代码。

这听起来是合理的中间立场。谢谢这听起来是合理的中间立场。谢谢