黄瓜中的Lexing错误是什么?

时间:2014-11-11 11:39:59

标签: cucumber

我试图运行一个简单的Feature文件,但我得到了Exception,如: 线程" main"中的例外情况cucumber.runtime.CucumberException:解析特征文件时出错。

引起的:gherkin.lexer.LexingError:Lexing错误

我正在尝试参数化一个When语句并获得此异常:

Scenario: Login to Gmail

  Given User is on Gmail login page
  When User enters <userName> and <pwd>
  And Clicks on login button
  Then User should redirect to home page

  scenario outline(tried Examples as well but didn't worked): 
  |userName   | pwd |
  |ravivani10 | abc |

6 个答案:

答案 0 :(得分:6)

方案大纲的正确语法是从关键字方案大纲:开始,并使用示例关键字列出示例。

Scenario Outline: Login to Gmail
  Given User is on Gmail login page
  When User enters <userName> and <pwd>
  And Clicks on login button
  Then User should redirect to home page
Examples:
  | userName   | pwd |
  | ravivani10 | abc |

答案 1 :(得分:4)

我遇到了同样的问题,但我使用了正确的语法。原来我的格式错了,是的你读得正确:格式化。我的方案看起来像这样:

Scenario Outline: Confirm that hitting the endpoint returns the expected data
    Given uri url/to/a/service/to/test/param/{interval} and method GET
    And system user
    When I call the web service
    Then I expect that 'http status is' '200'
    And the following rules must apply to the response
        | element                     | expectation         | value                |
        | $                           | is not null         |                      |
        | objectType                  | value =             | Volume               |
        | objectData                  | is not null         |                      |
        | objectData                  | count =             | 1                    |
        | objectData[0].value         | is not null         |                      |
        | objectData[0].value         | data type is        | float                |
        | objectData[0].value         | value =             | <value>              |
    Examples:
        | interval | value     |
        | int1     | 355.77    |
        | int2     | 332.995   |
        | int3     | 353.71125 |

以上测试将因Lexing Error而失败。现在看一下我的测试的示例部分的缩进(它在场景Ouline下缩进一层)。

如果我按如下方式缩进我的测试(与场景大纲相同):

Scenario Outline: Confirm that hitting the endpoint returns the expected data
    Given uri url/to/a/service/to/test/param/{interval} and method GET
    And system user
    When I call the web service
    Then I expect that 'http status is' '200'
    And the following rules must apply to the response
        | element                     | expectation         | value                |
        | $                           | is not null         |                      |
        | objectType                  | value =             | Volume               |
        | objectData                  | is not null         |                      |
        | objectData                  | count =             | 1                    |
        | objectData[0].value         | is not null         |                      |
        | objectData[0].value         | data type is        | float                |
        | objectData[0].value         | value =             | <value>              |
Examples:
    | interval | value     |
    | int1     | 355.77    |
    | int2     | 332.995   |
    | int3     | 353.71125 |

以上测试将通过。对我来说完全愚蠢,但这就是它的运作方式。

答案 2 :(得分:2)

来自黄瓜的lexing错误只是意味着特征文件不是黄瓜所期望的格式。这可能就像拥有一个没有内容的场景标题或者标题为“Feature:blah”两次。即使错误不在您正在运行的方案中,也会发生这种情况。

lexing错误通常会给你一个行号。你可以发布它抱怨的那条线吗?

答案 3 :(得分:2)

这可能是由于每行数据末尾没有最终|造成的。这不是OP的原因,但可能会帮助其他人。

答案 4 :(得分:1)

我遇到了同样的错误,这是由于“轮廓”一词和冒号之间有一个空格引起的

Scenario Outline : Convert currencies

当我删除空间时,我有了这个:

Scenario Outline: Convert currencies

..问题得到解决。

要找出违规者,请检查您的错误日志,您将在输出中找到错误所在的行号。我希望这对某人有帮助

答案 5 :(得分:0)

您需要做两件事:A)删除Feature:和Scenario Outline:关键字中的空格;和B)将“方案大纲”更改为“方案”(或为大纲添加缺少的示例)。

如果您运行此功能:

功能:我的框架有效的概念证明

方案:我的第一个测试   鉴于这是我的第一个测试   当这是我的第二步   然后,这是最后一步 然后,黄瓜将输出待完成的步骤定义:

您可以使用以下代码段为未定义的步骤实现步骤定义:

给出(/ ^这是我的第一个测试$ /)   待定#在此处编写代码,将上面的短语变为具体动作 结束

何时(/ ^这是我的第二步$ /)   待定#在此处编写代码,将上面的短语变为具体动作 结束

然后(/ ^这是最后一步$ /)   待定#在此处编写代码,将上面的短语变为具体动作 结束