Behat,mink和goutte:当前URI必须是绝对URL

时间:2012-09-15 11:25:00

标签: symfony symfony-2.1 behat mink goutte

我在使用Behat和Mink时遇到了一些问题。使用的驱动程序是Goutte。我正在尝试测试我的Symfony 2.1应用程序。

我的 behat.yml

default:
extensions:
    Behat\Symfony2Extension\Extension:
        mink_driver: true
    Behat\MinkExtension\Extension:
        base_url: 'http://localhost/project/web/app_dev.php'
        goutte: ~

我的 test.feature

Feature: Test
   In order to log-in
   As a user
   I need to be able to use the login-form

   Scenario: Logging in
       Given I am on "/login"
       When I fill in "username" with "admin"
       And I fill in "password" with "password"
       And I press "_submit"
       Then show last response
       Then I should see "Hello"

当我尝试执行测试时(在Windows 7上):

bin\behat @MyTestBundle

测试停在

  

我按“_submit”

出现此错误:

Current URI must be an absolute URL ("/app_dev.php").

我已经尝试了几乎所有可能的base_url路径,但我没有设法让它工作。

您是否知道如何解决此问题?

我尝试提交的表单:

<form action="/app_dev.php/login_check" class="form-horizontal" method="post">
    <fieldset>
        <div class="control-group">
            <label class="control-label" for="username">Nazwa użytkownika:</label>

            <div class="controls"><input type="text" id="username" name="_username" value=""/></div>
        </div>

        <div class="control-group">
            <label for="password" class="control-label">Hasło:</label>

            <div class="controls"><input type="password" id="password" name="_password"/></div>
        </div>

        <div class="control-group">
            <div class="controls">
                <label for="remember_me" class="checkbox">
                    <input type="checkbox" id="remember_me" name="_remember_me" value="on"/>Nie wylogowuj mnie
                </label>
            </div>

        </div>
        <div class="form-actions">
            <input type="submit" class="btn-primary" id="_submit" name="_submit"
                   value="Zaloguj"/>
            <a href="/app_dev.php/register/" class="btn btn-success">Rejestracja</a>
        </div>
    </fieldset>
</form>

2 个答案:

答案 0 :(得分:1)

在你的twig模板中,当你创建login_check url时,你必须创建一个绝对url(path的第三个参数,为true来创建一个绝对url):

{{ path('route', {}, true) }}

答案 1 :(得分:1)

我今天找到了解决问题的方法。

确实问题出现在路径功能中。 路径函数应替换为twig url 函数。

有趣的是:在表单操作属性中将函数更改为 url 将无济于事。在我的基础布局中,我有:

<base href="{{ path('_default')}}"/>

这一行代码引起了问题,应该是:

<base href="{{ url('_default')}}"/>

此更改后,测试按预期工作。