Codeigniter не может издеваться над любым объектом, используя аспектмок

Я делаю новый и чистый проект 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: *

и я делаю так много хаков, чтобы интегрироваться с codeception

наконец, я могу протестировать с помощью функции &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" для папок приложений/моделей

а потом добавить в конфиг автозагрузки

а в классе 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'

какой шаг неверный?


person herb    schedule 20.06.2015    source источник


Ответы (1)


CodeIgniter не имеет настоящего автозагрузчика. Попробуйте это: https://github.com/Codeception/AspectMock#without-autoloader

person kenjis    schedule 21.06.2015
comment
Спасибо, теперь мне просто нужно копаться в коде CI 2, чтобы найти его автозагрузчик, и я действительно могу протестировать вещи CI 2. - person Dylan Pierce; 13.06.2018