Silex phpunit не соответствует маршрутам

Я пытаюсь написать несколько тестов для своего приложения Silex и столкнулся с проблемой.

У меня есть следующий файл phpunit.xml

<?xml version="1.0" encoding="UTF-8"?>
<phpunit 
     bootstrap="./bootstrap.php"
     backupGlobals="false"
     backupStaticAttributes="false"
     colors="true"
     convertErrorsToExceptions="true"
     convertNoticesToExceptions="true"
     convertWarningsToExceptions="true"
     processIsolation="false"
     stopOnFailure="false"
     syntaxCheck="false"
>
    <testsuites>
        <testsuite name="Management Test Suite">
            <directory>./</directory>
        </testsuite>
    </testsuites>
    <filter>
        <whitelist>
            <directory>../src/</directory>
        </whitelist>
    </filter>
</phpunit>

Начальный код

<?php

use Symfony\Component\HttpKernel\Client;

function getJSONResponse($app, Client $client, $url, $params = array())
{
    $params['test_key'] = $app['test_key'];
    $client->request('GET', $url, $params);
    $response = $client->getResponse();
    $data = json_decode($response->getContent(), true);
    return $data;
}

Мой первый тестовый файл выглядит следующим образом

<?php

require_once $_SERVER['frog_docroot'] . '/www/vendor/autoload.php';

class DefaultTest extends Silex\WebTestCase
{
    public function createApplication()
    {
        return require $_SERVER['frog_docroot'] . '/www/src/app.php';
    }

    public function testInvalidUrlThrowsException()
    {
        $client = $this->createClient();
        $data = getJSONResponse($this->app, $client, '/some/url/that/does/not/exist');
        $this->assertContains('No route found for "GET /some/url/that/does/not/exist"', $data['message']);
    }
}

А мой второй такой

<?php

require_once $_SERVER['frog_docroot'] . '/www/vendor/autoload.php';

class AnotherTest extends Silex\WebTestCase
{
    public function createApplication()
    {
        return require $_SERVER['frog_docroot'] . '/www/src/app.php';
    }

    public function testSearchReturnsResults()
    {
        $client = $this->createClient();
        $data = getJSONResponse($this->app, $client, '/packages/search', array(
            'search' => 'something',
            'offset' => 0,
            'limit' => 10,
        ));

        $this->assertSame(array(
            'data' => array(
                '1' => 'Some Package',
            ),
            'offset' => 0,
            'limit' => 10,
        ), $data);
    }
}

Проблема в том, что если я запускаю тест по отдельности, они оба проходят.

Если я запускаю их как часть набора тестов, возникает исключение

There was 1 failure:

1) AnotherTest::testSearchReturnsResults
Failed asserting that Array (
    'message' => 'No route found for "GET /packages/search"'
    'code' => 0
) is identical to Array (
    'data' => Array (
        '1' => 'Some Package'
    )
    'offset' => 0
    'limit' => 10
    'more' => false
).

Есть ли что-то явно неправильное в том, как я пытаюсь написать тесты?

Ваше здоровье


person Lee    schedule 19.09.2012    source источник
comment
Где код маршрута/пакетов/поиска   -  person gunnx    schedule 25.09.2012
comment
Рассматривали ли вы возможность использования Behat?   -  person umpirsky    schedule 05.10.2012
comment
Вы когда-нибудь догадывались об этом? Столкнулся с той же проблемой.   -  person Lewis    schedule 16.10.2012
comment
К сожалению, нет, но меня переключили на другой проект. Я отвечу здесь, если мне удастся это решить.   -  person Lee    schedule 18.10.2012
comment
Если где-то в проекте у вас есть include_once или require_once, удалите _once! PHPunit не любит include_once или require_once!   -  person pmoubed    schedule 04.02.2014
comment
@PMoubed У меня была такая же проблема, и я не мог ее исправить, пока не прочитал ваш комментарий! Это должен быть принятый ответ ИМХО!   -  person ferdynator    schedule 07.09.2014


Ответы (1)


Я столкнулся с той же проблемой. Все, что мне нужно было сделать (хотя мне это решение не понравилось), это использовать require и include вместо require_once и include_once.

person totas    schedule 26.06.2015