【问题标题】:How can I define a Given statements in Cucumber using other When statements?如何使用其他 When 语句在 Cucumber 中定义 Given 语句?
【发布时间】:2018-08-27 07:16:40
【问题描述】:

我最近一直在使用 Cucumber 和 Cypress(实际上是在编写一个框架:picklejs.com)。我喜欢用简单的英语来定义一切。

但是,我似乎无法找到一种方法来使用其他 When 语句来定义我的 Given 语句。我只能以编程方式定义它。

关于如何实现这一点的任何想法?

GivenDef: I do 2 actions 
    When I do action 1
    And I do action 2

Scenario: I do 3 actions 
    Given I do 2 actions
    When I do action 3

【问题讨论】:

    标签: cucumber cypress


    【解决方案1】:

    您想从另一个场景中调用一个场景。 Gherkin 不支持这一点。而且它也不太可能被支持,因为这导致使用 Gherkin 作为编程语言。

    那么这是如何实现的呢?在更高的抽象级别表达您的场景。当执行这些步骤时,这个更高级别的场景将委托给一个或多个帮助程序库。就像@joshua-wade 建议的那样。

    是倒退吗?这取决于你的观点。如果 Gherkin 被用作指定测试的编程语言,它可能看起来倒退了。如果 Gherkin 是一种记录您的系统应如何以业务语言使用的示例的方式,那么它并没有那么倒退。至少在我看来不是。

    【讨论】:

    • 对,但从 PM 的角度想象一下:你有一个序列,你经常这样做。例如:“将商品添加到购物车,将数量设置为 3,将颜色设置为红色”。 PM 要么必须一遍又一遍地重复这 3 个短语,使定义无法阅读,要么打扰开发人员制作程序序列。他们自己在一个块中定义序列,然后将其称为简单的When,不是更容易吗?
    • 我想研究如何在语法中添加“场景”块,看看他们喜欢它。我想我应该分叉这个,对吧? github.com/cucumber/cucumber/tree/master/cucumber-expressions/…
    【解决方案2】:

    作为纯粹的 Gherkin 问题,我不相信您所问的问题是直接可能的。这是 Gherkin 作为一种定义测试的方式的局限之一。

    我看到有人建议为测试功能构建一个帮助程序库,并在您的步骤定义中调用这些外部函数。这样,您可以执行以下操作:

    小黄瓜:

    Scenario: I do 3 actions
        Given I do 2 actions
        When I do action 3
    

    步骤定义:

    Given("I do 2 actions", () => {
        action1();
        action2();
    });
    
    When("I do action 3", () => {
        action3();
    });
    

    助手库:

    let action1 = () => {
        // ...
    };
    let action2 = () => {
        // ...
    };
    let action3 = () => {
        // ...
    };
    

    如果代码不完全准确,我深表歉意。我只在 Ruby 中使用过 Cucumber。

    【讨论】:

    • 是的,这就是我迄今为止所做的。当黄瓜的全部目的是启用简单的英语定义时,以编程方式定义序列似乎有点倒退。我的目标是让我们的 PM 编写我们所有的测试。这将包括序列。我在pickle中预定义了他们需要的所有句子。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-10
    • 1970-01-01
    相关资源
    最近更新 更多