我正在使用laravel 4并在其自己的命名空间下创建了一个类。在这个类中,有一个方法可以检索数据并对其进行缓存。我还写了一个非常小的单元测试来检查缓存是否有效。出于某种原因,缓存在单元测试时不起作用,但在通过浏览器访问时确实有效。我甚至修改了app/config/testing/cache.php
驱动程序以使用apc而不是数组,它仍然不起作用。
以下是代码:
<?php namespace site;
use Cache;
class UserController {
public function testCaching( )
{
Cache::put('test', 'testing', 1);
if (Cache::has('test')) die("YES: " . Cache::get('test')); die("NO");
}
}
routes.php
文件(通过浏览器工作,结果:'YES测试'):
Route::get('test-caching', 'site\UserController@register');
测试(不适用于phpunit,结果:'NO'):
<?php namespace site;
use Illuminate\Foundation\Testing\TestCase;
class SiteTest extends TestCase {
/** @test */
public function it_caches_vendor_token()
{
$user = new UserController();
$user->testCaching();
}
}
有没有其他人遇到过这个问题?任何解决方案?
答案 0 :(得分:0)
在单元测试中,我会在...中找不到缓存
问题在于我没有正确引导我的测试环境。由于我的应用程序没有正确引导,因此它不会注册别名(Cache,Eloquent,Log等)。要正确引导,您需要扩展看起来像
的TestCaseuse Illuminate\Foundation\Testing\TestCase as BaseCase;
class TestCase extends BaseCase
{
/**
* The base URL to use while testing the application.
*
* @var string
*/
protected $baseUrl = 'http://localhost.dev';
/**
* Creates the application.
*
* @return \Illuminate\Foundation\Application
*/
public function createApplication()
{
$app = include __DIR__.'/../bootstrap/app.php';
$app->make(\Illuminate\Contracts\Console\Kernel::class)->bootstrap();
return $app;
}
}
并且在您的测试中应该看起来像这样
class MyBrandNewTest extends TestCase {
public function setUp()
{
parent::setUp();
}
}
parent :: setUp()将调用BaseTest中的setUp方法,该方法将引导测试环境。