Codeigniter не может издеваться над любым объектом, используя aspectmock
Я делаю новый и чистый проект Codeigniter 2.2.1, чтобы проверить эту проблему.
моя среда:
MacOSX 10.10
PHP 5.6.8 (cli) (built: Apr 20 2015 10:59:03)
Copyright (c) 1997-2015 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2015 Zend Technologies
with Xdebug v2.2.3, Copyright (c) 2002-2013, by Derick Rethans
Codigniter 2.2.1
Codeception: *
Codeception/aspectmock: *
и я делаю так много взломать, чтобы интегрироваться с кодексом
наконец, я могу протестировать с помощью функции &get_instance(), и все может работать нормально.
Но,
когда я хочу издеваться над моделью или классом Lib
не происходит то, что я ожидаю.
вот мой файл _bootstrap
include __DIR__.'/../vendor/autoload.php'; // composer autoload
$kernel = \AspectMock\Kernel::getInstance();
$kernel->init([
'debug' => true,
'includePaths' => [
__DIR__.'/../application',
__DIR__.'/../system',
],
"excludePaths" => [
__DIR__
],
"cacheDir" => "/tmp/mock_cache",
"appDir" => __DIR__.'/..',
"vendor" => __DIR__.'/../vendor'
]);
.....
Codeigniter hack and my autoload
.....
а потом я создаю модульный тест
php vendor/bin/codecep g:test unit pub
о да, я должен создать класс "pub" для папок application/models
а затем добавить его в конфигурацию автозагрузки
и класс pub имеет публичную функцию gogo()
он вернет строку "123"
class pub extends CI_Model
{
public function gogo()
{
return "123";
}
}
Я хочу издеваться над этим, чтобы вернуть "456"
так что мой тестовый файл
use AspectMock\Test as test;
...
protected $CI;
protected function _before()
{
$this->CI = &get_instance();
}
protected function _after()
{
\AspectMock\Test::clean();
}
// tests
public function testMe()
{
$mymodel = test::double("pub", ["gogo" => "456"]);
$this->assertEquals("456", $this->CI->pub->gogo());
}
результат провал
Failed asserting that two strings are equal.
--- Expected
+++ Actual
@@ @@
-'456'
+'123'
какой шаг не так?
1 ответ
CodeIgniter не имеет реального автозагрузчика. Попробуйте это: https://github.com/Codeception/AspectMock