很有可能无法在看不到我所在的代码库的情况下为我提供帮助,但是我想问一下,以防万一有人做了类似的事情
我将在下面详细介绍我的处境,但我要问的主要问题是:是否有人必须为使用Laravel作为依赖项的旧代码库编写测试,您是否能够使用Laravel的TestCase还是必须扮演自己的测试环境?
我正在使用15年以上的旧php应用程序...大约一年前,他们开始在Laravel中编写一堆新API。旧版应用程序包括Laravel应用程序作为依赖项。因此,发生的情况是,通过htaccess
重写规则,去api/v2
的请求命中了引导Laravel应用程序的索引文件。该索引文件包含一个init.inc.php
,它为旧版应用程序进行了大量设置,然后在启动Laravel应用程序时,它实际上引导了一个自定义类,该类扩展了Laravel的Illuminate\Foundation\Application
。这样做是因为有许多旧配置传递给Zend_Config
,然后将存储目录设置为指向旧应用而不是laravel应用内部。
Laravel应用程序是一个私人打包程序,在开发过程中会与该存储库的本地副本建立符号链接。在生产过程中,它只是一个供应商软件包。
我正在尝试为这该死的东西设置测试...而且进展不顺利
我真的希望能够在Laravel应用程序本身中拥有一个测试套件,但是看起来我无法做到这一点,因为引导流是在旧版应用程序确实存在的前提下创建的它的所有设置都是在Laravel升级之前完成的,当然,Laravel应用也依赖于旧版应用。
所以我一直想解决的是在旧版应用程序中设置测试,并运行标准启动顺序,然后启动Laravel。实际上,我可以将其与扩展BaseTestCase
的{{1}}类一起使用,并且可以在测试内部实例化我的Eloquent模型,可以使用Guzzle击中端点并在响应中声明等等。似乎工作正常
问题是,目前我还没有一种简便的方法可以单独测试任何东西,因此接触数据库是我目前第一个使用的方法。但是,我也没有一种简便的方法来播种测试数据,也没有一种简便的方法来将我的测试包装到在每次测试后回滚的事务中。 (我可能不得不老实地走这条路,但是看来这可能会导致很多工作)。令人惊讶的是,如果我只使用PHPUnit\Framework\TestCase
,那么我会拥有所有Laravel糖果,而不必必须直接与Guzzle合作,但也需要Illuminate\Foundation\Testing\TestCase
和DatabaseTransactions
或WithoutEvents
等特质。
虽然有些不对劲。当我尝试扩展Laravel TestCase时,出现类似WithoutMiddleware
仔细研究某些源代码,好像Argument 1 passed to Illuminate\Database\Eloquent\Model::setEventDispatcher() must implement interface Illuminate\Contracts\Events\Dispatcher, null given,
检查TestCase
是否已实例化,如果没有调用,则调用在我的自定义{{1}上定义的抽象app
方法},但我得到的错误是告诉我createApplication()
是TestCase
。 gh,当然,我也无法在他们的环境中使用Xdebug,因此我无法正确地逐步执行并准确了解正在发生的事情。
基本上,我现在的主要目标是弄清楚如何使用它们的设置进行调试,因此我实际上可以逐步执行代码,但是我认为如果有人提出建议,我会在StackOverflow上提出一个问题。现在,使我更接近能够使用Laravel TestCase的一切都会令人感到惊奇。
我知道这是一个远景,但是以前有人尝试过这种方法吗?您是否可以在旧版应用中使用Laravel测试套件?
修改
这是我的$app['events']
替代项在用假路径删除实际路径后的样子:
null
相同的代码在我的准系统测试用例中起作用,在这里我只是扩展了PHPUnit的测试用例。