Phalcon 3中的单元测试(从2升级),DI无法找到服务

时间:2017-06-14 12:30:33

标签: unit-testing phalcon

我无法将旧项目从Phalcon 2(2.0.9)迁移到Phalcon 3(3.1.2)。代码本身似乎运行正常(首先看),但单元测试只是不起作用。 我已经浏览了文档(https://docs.phalconphp.com/en/3.0.1/reference/unit-testing.html),甚至从头开始重建我的TestHelper和UnitTestCase只是为了确保一切都到位,但特别是DI容器似乎有很多不同的工作方式在Phalcon 3中与Phalcon 2相比较。

例如:

  • "父::设置()"需要在" setUp()"的开头运行。在UnitTestCase。
  • "父::设置()"在UnitTestCase结束时需要更改为" $ this-> setDi($ di)"
  • 除非您明确使用" $ this-> setConfig($ config)"否则所有测试中的配置都是未知的。在UnitTestCase中(花了我几个小时来解决这个问题)。
  • 我似乎需要注册"请求"和#34;回应" (作为共享)在我的DI中运行任何需要请求或响应对象的单元测试。之前没有必要这样做。测试仍然没有奏效,但至少警告说服务"请求/响应"不知名的人走了。
  • " modelsManager" DI现在不为人知,我也需要注册" modelsMetadata"在DI中使单元测试工作。 Phalcon 2也没有必要这样做。

它仍然无法正常工作(虽然我通过上述修复修复了数百条警告),现在我收到了消息" Phalcon \ Di \ Exception:Service& #39;过滤器'在依赖注入容器中找不到"当运行单元测试时,尝试使用" $ form-> isValid($ post)"来验证表单。用Phalcon 2这种方式很好。

我已经在这几天苦苦挣扎,开始计划升级到Phalcon 3,只是为了保留一台旧服务器,Phalcon 2运行用于遗留项目,即使这感觉就像失败一样......是否有人遇到同样的问题,这是否真的 - 很难相信 - 升级到Phalcon 3的方式?

这是我的一些代码,TestHelper:

include __DIR__ . '/../../../vendor/autoload.php';
$loader = new \Phalcon\Loader();
$loader->registerDirs([ROOT_PATH]));
$loader->registerNamespaces( ... );
$loader->register();
$di = new FactoryDefault();
Di::reset();
Di::setDefault($di);

UnitTestCase(对于每个模块):

abstract class UnitTestCase extends PhalconTestCase
{
    public function setUp()
    {
        parent::setUp();
        $di = Di::getDefault();
        (... setting my services as well as Request/Response here...)
       $this->setDi($di);
    }
}

0 个答案:

没有答案