1

ここのチュートリアルに基づいています: フォーム イベントを使用してフォームを動的に生成する方法

イベント サブスクライバーを使用するフォームを作成しました。

class PageType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('name', 'text');

        $blockSubscriber = new AddBlocksSubscriber($builder->getFormFactory());
        $builder->addEventSubscriber($blockSubscriber);
    }

    // ...
}

これまでのところ、うまくいっています...ユニットテストを書くことにするまでは。;) 「new」キーワードの使用には問題があります。これは、モック サブスクライバー オブジェクトを使用できないためです。

考えられる解決策は次の 2 つです。

  1. ここで説明されているように、テスト ヘルパー/クラス ポージングを使用します。これをしなければならないのは適切ではないと感じますが、実用的な回避策になる可能性があります。

  2. 依存性注入を使用します。たとえば、PageType フォーム コンストラクターがブロック サブスクライバーのインスタンスを必要とするようにします。ここで私が見つけた問題は、フォームの外部でサブスクライバー オブジェクトを作成するには、フォーム ビルダーのインスタンスも必要になることです。通常、フォームはコントローラーを呼び出すことによって構築されるcreateForm()ため、通常、フォームの外部からビルダーを表示することはできません。

または、フォームの単体テストが本当に必要ですか、それともクローラーを使用した最終出力の機能テストで十分ですか?

いくつかの Symfony2 フォームを実装したことがある人なら、どのようにアプローチしたか知りたいです。

4

1 に答える 1

2

Symfony2 クックブックには、フォームの単体テスト専用の章が含まれるようになりました: http://symfony.com/doc/master/cookbook/form/unit_testing.html

于 2013-04-16T05:24:09.493 に答える