3

在 Behat 和输入验证场景中有一个类似的问题@Gherkin

然而不一样。

我的问题是我需要场景大纲示例或数组

Given I have a problem with data
   | in  | this    | array      |
   | how | can     | I          |
   | add | special | characters | 

大多数特殊字符都可以,但是引号和管道呢?

special characters example: \|!"#$%&/()=?«»'{}[]'`^~*+ºª-_.:,;<>@ł€¶ŧ←↓→øþĸħŋđðßæ|«»¢“”nµ

谢谢

4

4 回答 4

3

我知道自发布以来已经过去了一年,但今天遇到了类似的问题,我在这里发布了我的解决方案。

我在这里复制它以防谷歌组帖子被删除:

问题

我的 .feature 文件是这样的:

 Then I get a response with "error" equals to "<error>"

 And I get a response with "error" equals to "<error_message>"


 Examples:

 |error                    |  error_message                                                              |

 |NotFoundHttpException    |  Something with quotes "More text here"                     |

如您所见,我正在调用相同的步骤来检查包含文本中引号的列之一和不包含引号的列。

当我运行 Behat 测试时,“这里的更多文本”被作为另一个参数,Behat 建议另一个片段。

解决方案

为了解决这个问题,我们必须使用另一个不同于 " 的字符来告诉 Behat 存在一个变量,在我的例子中,我使用了单引号。

所以,我改变了 .feature 是这样的:

 Then I get a response with "error" equals to "<error>"

 And I get a response with "error_message" equals to '<error_message>' escaping quotes

 Examples:

 |error                    |  error_message                                                            |

 |NotFoundHttpException    |  Something with quotes "More text here"                     |

然后我更新了我的 php 测试实现,如下所示:

/**
 * @Then I get a response with :attibute equals to :value
 * @Then /^I get a response with "([^"]+)" equals to '([^']+)' escaping quotes$/
 */
public function iGetAResponseWithEqualsTo($attibute, $value)

调用了相同的实现。

阅读此页面后,我提出了此解决方案,以防有人需要。

于 2015-01-30T22:00:48.647 回答
3

我在 Behat 3.0 上发现我可以使用 '' 作为分隔符来指定字符串,例如

Then I should see the text 'some "text" with "quotes"',并且它可以开箱即用,无需编写自定义步骤。

于 2016-03-09T21:06:01.540 回答
2

我发现一个可行的替代方法是匹配两个步骤定义,一个是匹配的字符串,用双引号括起来,另一个在 a PyString(步骤下方的三引号)中。

前任。

And the email body should contain
"""
This link with double quotes <a href="http://mockshare.url/file.pdf">DOWNLOAD</a>
"""

方法:

/**
 * Checks that the body of the last accessed email contains a string.
 *
 * @param mixed $body The string or PyString representing text to match.
 *
 * @uses A PyString class sometimes, to help with double quotes in the matched string. 
 * (Hence the string casting).
 *
 * @Then the email body should contain :body
 * @Then the email body should contain
 *
 * @return void
 */
public function theEmailBodyShouldContain($body)
{
    assertContains((string) $body, $this->body);
}//end theEmailBodyShouldContain()
于 2017-02-28T13:02:49.837 回答
0

发现需要转义反斜杠“\”的问题

我已经尝试过了,但是在我使用的编辑器上没有假设,因此需要进行功能测试来验证,并且使用 \" 或 \| 按预期工作。

于 2013-09-12T07:29:20.120 回答