【问题标题】:Cypress.io/Cucumber - Same function for Given/When/ThensCypress.io/Cucumber - Given/When/Then 的相同功能
【发布时间】:2020-04-20 20:23:08
【问题描述】:

我想知道是否有一种方法 Given/When/Then 可以共享代码,如果它做完全相同的事情。比如说(实际上并没有使用这个,只是作为一个例子):

Given I have searched for {string}
When I search for {string}
Then I will search for {string}

每个步骤的代码完全相同。除了(有时)BeforeEach/AfterEach 钩子之外,有没有办法让代码共享? 提前致谢!

【问题讨论】:

    标签: javascript cucumber cypress


    【解决方案1】:

    当然。我不是 Cypress 用户,但我与 Cucumber 一起使用的所有框架都忽略(或可以忽略)介词 (Given/When/Then)。如果是这种情况,或者您知道如何在您的实现中实现这一点,那么下面的正则表达式和共享代码就可以解决问题:

    ^I (have |will )?search(ed)? for$

    【讨论】:

    • 不幸的是,Cypress/Cucumber 似乎需要介词。下面是一个步骤的代码:When("I search for {string}", (string) => {
    • 你测试过这个吗?编写函数时通常是这种情况,但在运行时会忽略介词。
    【解决方案2】:

    我们使用 cypress-cucumber-preprocessor 来解析我们的特征文件。

    我们的 cucumberrunner.js 中的代码用于您的案例

    鉴于我已经搜索过“字符串”

    可能看起来像

    Given|Then|When(/.*?search*?for "(.+?)"/, string => {
        // do something with "string"
    });
    

    它确实忽略了关键字。

    (柏树版本 6.+)

    【讨论】:

      【解决方案3】:

      您可以使用defineStep 简单地实现通用步骤定义,如下所示:

      import { defineStep } from 'cypress-cucumber-preprocessor/steps';
      
      defineStep("I search for {string}", (searchString) => {
        // do something 
      })

      在功能文件中,您可以将上述步骤定义用作 Given、When 或 Then 步骤,就像您通常在您将其明确定义为其中之一:

      Feature: Login
          Scenario Outline: Sample
              Given I search for "xyz"
              When I search for "xyz"
              Then I search for "xyz"
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多