这里有人有使用 Redis 缓存驱动程序 (CI v3.0.2) 并使用 PHPUnit (v4.8.16) 对其进行测试的经验吗?
我只是按照 here 的描述尝试了它,它似乎在浏览器中运行良好,但是当我转到我的终端并尝试使用 PHPUnit 对其进行测试时,我得到了这个:
Fatal error: Uncaught exception 'RedisException' with message 'Redis server went away' in /path/to/my-app/system/libraries/Cache/drivers/Cache_redis.php on line 317
Call Stack:
0.0002 247008 1. {main}() /path/to/my-app/vendor/phpunit/phpunit/phpunit:0
0.0128 1116832 2. PHPUnit_TextUI_Command::main() /path/to/my-app/vendor/phpunit/phpunit/phpunit:47
0.0128 1117456 3. PHPUnit_TextUI_Command->run() /path/to/my-app/vendor/phpunit/phpunit/src/TextUI/Command.php:100
0.1355 6531040 4. PHPUnit_TextUI_TestRunner->doRun() /path/to/my-app/vendor/phpunit/phpunit/src/TextUI/Command.php:149
0.1437 6885808 5. PHPUnit_Framework_TestSuite->run() /path/to/my-app/vendor/phpunit/phpunit/src/TextUI/TestRunner.php:440
0.1647 7612208 6. PHPUnit_Framework_TestSuite->run() /path/to/my-app/vendor/phpunit/phpunit/src/Framework/TestSuite.php:747
0.1704 7615816 7. PHPUnit_Framework_TestCase->run() /path/to/my-app/vendor/phpunit/phpunit/src/Framework/TestSuite.php:747
0.1704 7616272 8. PHPUnit_Framework_TestResult->run() /path/to/my-app/vendor/phpunit/phpunit/src/Framework/TestCase.php:724
0.1705 7617952 9. PHPUnit_Framework_TestCase->runBare() /path/to/my-app/vendor/phpunit/phpunit/src/Framework/TestResult.php:612
0.1729 7937600 10. PHPUnit_Framework_TestCase->runTest() /path/to/my-app/vendor/phpunit/phpunit/src/Framework/TestCase.php:768
0.1729 7938368 11. ReflectionMethod->invokeArgs() /path/to/my-app/vendor/phpunit/phpunit/src/Framework/TestCase.php:909
0.1729 7938640 12. ControllersTest->testLoadController() /path/to/my-app/vendor/phpunit/phpunit/src/Framework/TestCase.php:909
0.1731 7941912 13. CI_Controller->__construct() /path/to/my-app/tests/core/ControllersTest.php:33
0.1732 7943440 14. load_class() /path/to/my-app/system/core/Controller.php:75
RedisException: Redis server went away in /path/to/my-app/system/libraries/Cache/drivers/Cache_redis.php on line 317
我的环境:
$ redis-cli --version
redis-cli 3.0.5
$ php --version
PHP 5.6.14-1+deb.sury.org~wily+1 (cli)
Copyright (c) 1997-2015 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2015 Zend Technologies
with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2015, by Zend Technologies
with Xdebug v2.3.3, Copyright (c) 2002-2015, by Derick Rethans
我的“application/config/redis.php”文件:
<?php
defined('BASEPATH') or exit('No direct script access allowed');
/**
* Redis Cache Configuration
* @link https://codeigniter.com/user_guide/libraries/caching.html#redis-caching
*/
$config['socket_type'] = 'tcp';
// $config['socket'] = '/var/run/redis.sock';
$config['host'] = '127.0.0.1';
$config['password'] = null;
$config['port'] = 6379;
$config['timeout'] = 0;
我该如何解决这个问题?
最佳答案
刚刚从 CI 社区论坛得到一个解决方案,它是从 CI_Cache_Redis
类扩展 __destruct()
方法来捕获 RedisException
。
Here the link和这里的代码(编辑了一下)
// application/libraries/Cache/drivers/MY_Cache_redis.php
public function __destruct()
{
try {
$this->_redis->close();
} catch (Exception $e) {
// Do nothing
// log_message('info', $e);
}
}
关于caching - Redis 缓存驱动程序在 PHPUnit 中抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33354176/