1

MongoDB を使用して Symfony2 でいくつかの機能テストを作成しようとしていますが、問題がわかりません。テストでは、フォームを介してオブジェクトを編集し、ドキュメント マネージャーでそれをフェッチしますが、変更されていない data を取得し続けます。DBを調べてみると、ちゃんとデータが変更されています。

私は何が欠けていますか?

4

1 に答える 1

3

完全なテストケースを確認すると役立ちますが、次のことを行っていると思います。

  • テスト ケースでドキュメント マネージャー サービスを介してオブジェクトをフェッチする
  • HTTP テスト クライアントを使用してフォーム送信をシミュレートする (参照:ここ)
  • 文書マネージャーを介してオブジェクトを再度フェッチする

変更がデータベースに表示されるため、フォームが適切にバインドされ、コントローラーが変更を適切にフラッシュしていると想定しても安全です。フォームの送信が独自のカーネル コンテキスト内で行われると仮定すると、フォームが内部で使用するドキュメント マネージャーは、テスト ケースで明示的に使用しているドキュメント マネージャーと同じインスタンスではありません。

ドキュメントが変更される前に最初の取得を行っている場合、再クエリを実行する前にrefresh()ドキュメントまたはすべての管理されたドキュメントのドキュメント マネージャでない限り、ドキュメント マネージャは他の場所でドキュメントに加えられた変更を認識しません。clear()デタッチのドキュメントでは、これについてもう少し説明しています。

上記の箇条書きがテスト ケースを正しく説明している場合は、再度クエリを実行して結果をアサートする前に、ドキュメント マネージャーをクリアすることをお勧めします。または、フォーム送信をシミュレートする前に、クエリをまったく実行しないようにテストを変更することもできます。使用しているテスト フィクスチャは、テスト ケース自体から抽象化される可能性があります (たとえば、setUp()メソッド中に挿入され、その後ドキュメント マネージャをクリアします)。

于 2012-08-14T15:08:02.327 に答える