BDD和Behat特殊字符

时间:2013-09-11 15:56:22

标签: bdd behat gherkin

有一个类似的问题@ Gherkin in Behat and input validations scenarios

然而不一样。

我的问题是我需要在场景中概述示例或数组

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

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

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

由于

4 个答案:

答案 0 :(得分:3)

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

如果谷歌群组帖子被删除,我会将其复制到此处:

问题

我的.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测试时,&#34;更多文字在这里&#34;正被视为另一个参数而Behat正在建议另一个片段。

解决方案

要解决此问题,我们必须使用与&#34;不同的另一个字符。告诉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)

调用相同的实现。

我在阅读this page之后找到了这个解决方案,以防有人需要它。

答案 1 :(得分:3)

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

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

答案 2 :(得分:1)

我发现一个可行的替代方案是匹配两个步骤定义,一个是用双引号括起来的字符串,另一个是PyString(步骤下面的三重引号)。 / p>

实施例

public class Document
{
    //The document class would not be part of the partial class
    //The document has other properties, I left them out to keep it simple
    public List<string> Lines { get; set; }

    public Document()
    {
        this.Lines = new List<string>
    }
}

partial class LineMethods // file named: H01.cs
{
    public void H01(DataSet ds1, DataSet ds2, Document doc)
    {

        string[] fields = new string[3];
        fields[0] = "855";
        fields[1] = "value from datatable";
        fields[2] = "value from datatable";

        string line = string.Join(",", fields);
        doc.Lines.Add(line);
    }
}

partial class LineMethods // File named: H10
{
    public void H10(DataSet ds1, DataSet ds2, Document doc)
    {
        string[] fields = new string[27];
        fields[0] = "855";
        fields[10] = "other from datatable";
        fields[16] = "other data";

        //Line variable would be added to the "document.Lines.Add"
        string line = string.Join(",", fields);
        doc.Lines.Add(line);
    }
}

方法:

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

答案 3 :(得分:0)

找到了逃避反斜杠所需的问题&#34; \&#34;

我已经尝试了这个,但是在我使用它的编辑器上并没有假设,因此需要进行功能测试以验证和使用\&#34;或\ |按预期工作。