unittest laravel缓存问题

时间:2014-08-13 21:18:24

标签: caching laravel-4 phpunit

我正在使用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();
    }
}

有没有其他人遇到过这个问题?任何解决方案?

1 个答案:

答案 0 :(得分:0)

在单元测试中,我会在...中找不到缓存

问题在于我没有正确引导我的测试环境。由于我的应用程序没有正确引导,因此它不会注册别名(Cache,Eloquent,Log等)。要正确引导,您需要扩展看起来像

的TestCase
use 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方法,该方法将引导测试环境。