высмеивание метода в переполнении стека

У меня есть проблема, когда я не знаю, как сказать, когда x вызывается, он ожидает, что y будет вызван хотя бы один раз, и мне все равно, что делает y, пока он вызывается.

Итак, если мы посмотрим на этот пример:

public static function createAction($params) {
$postParams = $params->request()->post();

// Controller logic here ...

$params->redirect('/signin');
}

Что я хочу сделать в моем тесте, который ниже, это сказать — я ожидаю redirect() с параметром '/singin' быть вызванным 1 раз.

Мой тест выглядит так:

<?php

use \GP\Models\User;
use Slim\Environment;
use \GP\Controllers\UserController;

class UserControllerTest extends PHPUnit_Framework_TestCase {

protected $em;

protected $app;

public function setUp() {
$this->em = getEntityManager(true);
$tool = new \Doctrine\ORM\Tools\SchemaTool($this->em);

$mdFactory = $this->em->getMetadataFactory();
$tool->dropSchema($mdFactory->getallMetadata());
$tool->createSchema($mdFactory->getallMetadata());
parent::setUp();

$_SESSION = array();
$this->app = new \Slim\Slim(array('mode' => 'testing'));
}

public function tearDown() {
$tool = new \Doctrine\ORM\Tools\SchemaTool($this->em);

$mdFactory = $this->em->getMetadataFactory();
$tool->dropSchema($mdFactory->getallMetadata());
parent::tearDown();
}

public function testUserCreate() {
Environment::mock(array(
'REQUEST_METHOD' => 'POST',
'slim.input'     => 'firstname=user&lastname=somethingelse&username=admin&[email protected]&password=1234567890&repassword=1234567890'
));

UserController::createAction($this->app);

$user = $this->em->getRepository('\GP\Models\User')
->findBy(array('user_name' => 'admin'));

$this->assertNotEmpty($user);
}
}

И когда его запустить я получаю:

$ phpunit
PHPUnit 4.6.6 by Sebastian Bergmann and contributors.

Configuration read from /var/www/html/Grab-Project/phpunit.xml

....E

Time: 13.45 seconds, Memory: 21.25Mb

There was 1 error:

1) UserControllerTest::testUserCreate
Slim\Exception\Stop:

/var/www/html/Grab-Project/vendor/slim/slim/Slim/Slim.php:1022
/var/www/html/Grab-Project/vendor/slim/slim/Slim/Slim.php:1042
/var/www/html/Grab-Project/vendor/slim/slim/Slim/Slim.php:1105
/var/www/html/Grab-Project/app/Controllers/UserController.php:73
/var/www/html/Grab-Project/tests/app/controllers/UserControllerTest.php:40

FAILURES!
Tests: 5, Assertions: 8, Errors: 1.

Эта проблема возникает, когда он пытается вызвать перенаправление. Это потому, что я не указал в своем тесте, где slim должен перенаправлять, вместо этого я хочу заглушить этот метод и сказать, что я ожидаю найти этого пользователя в базе данных, как и я, и я ожидаю, что этот метод с этим параметром будет вызван один раз ,

Я, как это сделать в рельсах, но читая документация смущает меня …

0

Решение

Если $ params-> redirect (‘/ signin’); это линия, которую она ломает, я думаю, вы должны решить эту проблему.

В настройках:

$this->app = $this->getMock(
'\Slim\Slim',
array('redirect'),
array(array('mode' => 'testing'))
);

array (array (намеренно) — это массив аргументов конструктора, и ваш конструктор выглядит так, как будто он хочет получить массив в качестве первого параметра.

Это вы можете добавить к своей функции тестирования.

$this->app->expects($this->once())->method('redirect');
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]