テストを書いている新しいモジュールがあります。このモジュールには、DI コンテナーを使用して他のオブジェクトを作成する必要があるため、ServiceLocatorAwareInterface を実装するクラスが含まれています。スケルトン アプリで実行するとすべて正常に動作しますが、モジュール テストを実行すると、次の結果が得られます。
Zend\Di\Exception\RuntimeException: "Zend\ServiceManager\ServiceLocatorInterface" の "NULL" 型のインスタンス化子が無効です
少し調べてみると、DI コンテナーが「ServiceLocatorAwareInterface」タイプの新しいオブジェクトを作成しようとしていることがわかりましたが、これはもちろん間違っています。
テストのブートストラップをもう少し掘り下げると、次の行を追加すると問題が解決することがわかりました。これは、DI がそのインターフェイスに対してインスタンス化するクラスを認識しているためです。
$di->instanceManager()->addTypePreference('Zend\ServiceManager\ServiceLocatorInterface', new \Zend\ServiceManager\ServiceManager());
私が渡した ServiceManager はダミーであるため、これが問題の最善の解決策であるかどうかはわかりません。
他のアイデアはありますか?