【问题标题】:Cucumber+Gherkin: Parse natural language to booleanCucumber+Gherkin:将自然语言解析为布尔值
【发布时间】:2017-03-17 10:09:54
【问题描述】:

所以,我们刚刚介绍了 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'n'p 将使我们的步骤定义增长得非常快,并使维护变得不必要地困难,除非我们事先弄清楚这种事情。 如果您认为这是一个愚蠢的想法,请阻止我,如果是,请告诉我原因。

【问题讨论】:

    标签: cucumber gherkin cucumberjs


    【解决方案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 之间所需的胶水代码。

    【讨论】:

    • 这听起来像是合理的中间立场。谢谢!
    猜你喜欢
    • 2013-09-12
    • 1970-01-01
    • 2012-07-05
    • 2011-02-04
    • 1970-01-01
    • 2012-05-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多