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.
之间所需的胶水代码
因此,我们刚刚引入了 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.
之间所需的胶水代码