У меня такие файлы:
/src/Api.php
<?php namespace src; class Api { function apiCall() { return 'api_result'; } }
/tests/_bootstrap.php
<?php include __DIR__.'/../vendor/autoload.php'; // composer autoload $kernel = \AspectMock\Kernel::getInstance(); $kernel->init([ 'debug' => true, 'includePaths' => [__DIR__.'/../src'], 'cacheDir' => __DIR__ . '/aspectCache' ]);
codeception.yml
paths: tests: tests output: tests/_output data: tests/_data support: tests/_support envs: tests/_envs actor_suffix: Tester extensions: enabled: - Codeception\Extension\RunFailed settings: bootstrap: _bootstrap.php
composer.json
{ "require-dev": { "codeception/aspect-mock": "*", "codeception/codeception": "^2.3" }, "autoload": { "psr-4": { "": "src/" } } }
index.php
<?php require_once "vendor/autoload.php"; use src\Api; $api = new Api(); echo $api->apiCall(); echo 'test';
/tests/acceptance/FirstCest.php
<?php use AspectMock\Test as test; use src\Api; class FirstCest { public function frontpageWorks(AcceptanceTester $I) { $I->amOnPage('/'); test::double(Api::class, ['apiCall' => 'mock']); $I->see('mocktest'); } }
Когда я загружаю страницу в браузере, я вижу строку 'api_resulttest'
Теперь, когда я высмеиваю функцию apiCall, вывод должен быть «mocktest».
Я выполняю команду
php codecept.phar run --steps -d
И тест терпит неудачу, я все еще вижу выход «api_resulttest».
Зачем? И правильно ли я использую его? https://github.com/Codeception/AspectMock здесь он не показывает, как использовать его в тестах на кодирование.
Или, пожалуйста, скажите другим способом – как я должен издеваться над вызовами api в кодексировании? То, что я хочу сделать.
Я нажал на битбакет, чтобы вы могли проверить пример: https://bitbucket.org/darius_v/codeception_mock/src
Обновление 2017 10 01 Теперь удаленный аспект издевается над моими последними фиксациями.
PhpBrowser делает запрос на ваш сайт через HTTP, поэтому макеты, установленные в тестовом коде, не влияют на код приложения.
Макеты работают в модульных тестах и в функциональных тестах, если вы используете модуль фреймворка.