Я пытаюсь узнать, как использовать Mockery с Laravel 5. Я основывал свои усилия в основном на книге Пути (Laravel Testing Decoded) и других учебниках, в которых говорится о интеграции [с PHPUnit] требуется только метод tearDown(). Поэтому я включил это. Проблема в том, что это не похоже на сброс вещей между тестами. Содержание моего тестового класса выглядит примерно так:Mockery false positive в тесте контроллера Laravel
public function __construct()
{
$this->mock = Mockery::mock('Class\To\Mock');
}
public function tearDown()
{
Mockery::close();
}
public function test_RedirectWithoutAuthentication()
{
// Act
$this->call('GET', '/path/1');
// Assert
$this->assertRedirectedTo('/auth/login');
}
public function test_X()
{
// Arrange
$this->mock->shouldReceive('MockedClassMethod')->once();
// Act
$this->call('GET', '/path/1');
}
Первые тестовые работы и промежуточное ПО Auth выталкивают пользователя на страницу входа. В интересах TDD, я написал второй тест, прежде чем MockedClassMethod на самом деле написан. Таким образом, к моему способу мышления, это должно быть неудачно эффектно. Но это не так. Он проходит!
Если я изменю порядок испытаний, он «работает» (неписаный сбой, auth pass), что заставляет меня думать, что это не проблема порядка, но что-то общее с одним тестом, который не очищается до следующий.
Любое понимание спасет оставшиеся волосы от вытаскивания. :-)
Вы пытались поместить определение mockery mock в метод установки вместо конструктора? – Matteo
Можете ли вы попытаться заменить 'public function __construct()' на 'protected function setUp()'? – Matteo