Symfony中的功能测试:如何在多条线上进行匹配?

时间:2012-12-19 15:34:32

标签: php json web-services symfony-1.4 functional-testing

我正在为Symfony中的json api构建一些功能测试。

使用sfTestFunctional对象测试我的结果,我会尝试验证以下响应:

{
    "result": true,
    "content": [
           "one",
           "two"
    ]
}

有类似的东西:

$browser = new sfTestFunctional(new sfBrowser());

$browser->
    get('/hi')->
    with('response')->
    begin()->
    isStatusCode(200)->
    matches('/result\"\: true/')->
    matches('/one.*two/m')->
end()

现在这就是我得到的:

ok 1 - status code is 200
ok 2 - response content matches regex /result\\: true/"
not ok 3 - response content matches regex /one.*two/m

当然,我做错了什么。任何提示?

1 个答案:

答案 0 :(得分:2)

正则表达式失败。

您应该使用包含换行符的flag s for dotall (PCRE_DOTALL)

  

如果设置了此修饰符,则模式中的点元字符将匹配所有字符,包括换行符。没有它,排除了换行符。

所以:

$browser->
    get('/hi')->
    with('response')->
    begin()->
    isStatusCode(200)->
    matches('/result\"\: true/')->
    matches('/one.*two/sm')->
end()

否则你可以进行两次不同的测试:

$browser->
    get('/hi')->
    with('response')->
    begin()->
    isStatusCode(200)->
    matches('/result\"\: true/')->
    matches('/\"one\"')->
    matches('/\"two\"')->
end()