1

Symfony 2 と phpunit で機能テストを行います。

しかし、サービスに問題があります。説明させてください。実行テスト中に、アプリケーションで使用されるサービスを使用したいと考えています。だから、カーネルを設定するためにsetUp関数を設定しました:

    static::$kernel = static::createKernel();
    static::$kernel->boot();
    $this->objectFactory = static::$kernel->getContainer()->get('some.application.objectfactory');

だから私はこれを持っていて、私の関数ではオブジェクトを返すサービスを使用する必要があるので、そのように私のサービスを呼び出します

$var = $this->objectFactory->getObject($id);

そして明らかに私のtearDown関数では、私はただ:

    protected function tearDown()
{
    $this->client->restart();
    unset($this->client, $this->objectFactory);
}

だから私の問題は、私がこのメッセージを持っているテストを実行するときです:

Symfony\Component\DependencyInjection\Exception\InactiveScopeException: 非アクティブなスコープ ("request") のサービス ("request") を作成することはできません。

そして、私はこれを解決する方法を見つけることができません。誰かが何か考えがありましたか??

Symfony のバージョンは 2.2.1 で、phpunit のバージョンは 3.7.19 です。

誰かが私を助けることができれば、私はとても幸せです.

私の英語が下手でしたら申し訳ありません。


編集

たぶん、私が使用したサービスで誰かを助けることができます::

        $request = $this->container->get('request');

それが機能しない理由のようです。削除すると、エラーは表示されませんが、それでも機能しません。


編集
@Cyprianあなたによると、私のコードを私が望むものに変更しました。だから私は自分のサービスに、私が望む関数にクライアント(クライアントWebテストケース)を追加し、関数内にこれを追加するだけです:

if (isset($client)) {
        $request = $client->getRequest();
    } else {
        $request = $this->container->get('request');
    }

したがって、サービスを呼び出す関数では、次のようになります。

    public function getObject($id)
{
    //Get the service from the kernel
    $service = static::$kernel->getContainer()->get('service');
    $object = $service->getObject($id, $this->client);
}

そして、それはこのようにうまく動作します

@nifrあなたのアイデアは私にはうまくいきませんが、あなたのアイデアは間違っていなかったと思います.私の場合はうまくいきません

しかし、助けてくれてありがとう。

4

2 に答える 2

0

リクエストを作成しない限り、phpUnit で使用できるリクエストはありません。

リクエストをテストしたい場合。次のように作成します。

use Symfony\Component\HttpFoundation\Request; 

protected $request;

public function setUp()
{
    // ...
    $this->request = new Request();
    // ... modify your request acccording to your needs
}

リクエストを使用して、サービスにセッターを追加/呼び出します。

$service = $this->kernel->getContainer()->get('your_service')
$service->setRequest($this->request);

またはWebtestCaseで機能テストを作成します。

于 2013-05-28T16:16:15.410 に答える