Codeception - Laravel 4 - все функциональные тесты не выполняются после запуска обновления композитора
У меня есть приложение Laravel 4, запущенное на моей машине для разработки (MacBook Pro, 15 дюймов, середина 2010 г.) в среде Homestead.
С момента запуска проекта более года назад я использовал тестовую разработку с Codeception в качестве ключевого принципа моего рабочего процесса.
Мой рабочий процесс основан на том, что представил Джеффри Уэй в своей серии "Построить Larabook From Scratch" о Laracasts.
У меня есть три набора тестов: функциональный, интеграционный и модульный.
И моя интеграция, и юнит-тесты все еще работают совершенно нормально.
Однако, так как вчера запускались самообновление композитора и обновление композитора при попытке установить 'DOMPDF Wrapper for Laravel 4' ("barryvdh / laravel-dompdf": "0.4. *"), Мои функциональные тесты случайно перестали работать, с каждым проверьте выдачу "Error" вместо "Pass" или "Fail".
Я немедленно удалил эту зависимость, но тесты продолжают приводить к "Ошибка".
Я попытался проверить предыдущие коммиты git и запустить тесты, однако возникают те же ошибки. Все тесты должны пройти до того, как будет сделан git commit, поэтому я не вижу причин, почему это не сработало бы.
Я также попытался полностью удалить кодовое восприятие и все тесты, переустановить кодовое восприятие и затем скопировать несколько тестов. Произошли те же ошибки.
Я также попытался явно указать более старую версию codeception в моем файле composer.json и использовать ее вместо использования "~2.0".
Приложение отлично работает как в разработке, так и в производстве, не работает только набор тестов. Однако дальнейшая разработка невозможна до тех пор, пока не будет запущен набор тестов.
Все мои функциональные тесты основаны на входе пользователя, кроме того, которое регистрирует пользователя. Это делается способом, продемонстрированным Джеффри Уэем в серии онлайновых обучающих программ, о которых я упоминал ранее, со вспомогательным методом входа в систему, на который ссылаются в начале каждого теста.
Это связано с тем, что все действия контроллера, кроме тех, которые облегчают вход в систему и т. Д., Защищены фильтром аутентификации.
Когда выполняется vendor/bin/codecept, запускается функционал --debug -vvv, вывод для каждого теста следующий:
8) Failed to login to an account in Sessions/SignInCept (tests/functional/Sessions/SignInCept.php)
[ErrorException] Trying to get property of non-object (View: /home/vagrant/insightsa/app/views/pages/home.blade.php)
Scenario Steps:
2. $I->signIn() at tests/functional/Sessions/SignInCept.php:7
1. // As an an Insight member
#1 /home/vagrant/insightsa/vendor/laravel/framework/src/Illuminate/View/Engines/PhpEngine.php:41
#2 /home/vagrant/insightsa/vendor/laravel/framework/src/Illuminate/View/Engines/CompilerEngine.php:56
#3 /home/vagrant/insightsa/vendor/laravel/framework/src/Illuminate/View/View.php:134
#4 /home/vagrant/insightsa/vendor/laravel/framework/src/Illuminate/View/View.php:102
#5 /home/vagrant/insightsa/vendor/laravel/framework/src/Illuminate/View/View.php:76
#6 /home/vagrant/insightsa/vendor/laravel/framework/src/Illuminate/Http/Response.php:43
#7 /home/vagrant/insightsa/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Response.php:202
#8 /home/vagrant/insightsa/vendor/laravel/framework/src/Illuminate/Routing/Router.php:1501
#9 /home/vagrant/insightsa/vendor/laravel/framework/src/Illuminate/Routing/Router.php:1036
#10 /home/vagrant/insightsa/vendor/laravel/framework/src/Illuminate/Routing/Router.php:1001
Тест, который я использовал в качестве примера выше, SignInCept.php, выглядит следующим образом:
<?php
$I = new FunctionalTester($scenario);
$I->am('an Insight member');
$I->wantTo('login to an account');
$I->signIn();
$I->seeCurrentUrlEquals('');
$I->see('Login successful.');
$I->assertTrue(Auth::check());
На функцию signIn ссылаются из класса FunctionalHelper:
class FunctionalHelper extends \Codeception\Module {
/**
* @throws \Codeception\Exception\Module
*/
public function signIn()
{
$I = $this->getModule('Laravel4');
$password = "test";
$user = $this->haveAnAccount(compact('password'));
$I->amOnPage('/login');
$I->fillField('email', $user->email);
$I->fillField('password', $password);
$I->click('Sign In');
}
/**
* @param $model
* @param array $overrides
* @return mixed
*/
public function have($model, $overrides = [])
{
return TestDummy::create($model, $overrides);
}
/**
* @param array $overrides
* @return mixed
*/
public function haveAnAccount($overrides = [])
{
return $this->have('Insight\Users\User', $overrides);
}
...
При входе пользователя в систему контроллер отображает представление home.blade.php. Единственная переменная, которую использует это представление, это $currentUser следующим образом:
{{ $currentUser->username }}
а также вот так:
@if($currentUser->email == "user@example.com")
...
@endif
Эта переменная предоставляется представлению через BaseController, который расширяют все остальные контроллеры:
protected function setupLayout()
{
if ( ! is_null($this->layout))
{
$this->layout = View::make($this->layout);
}
View::share('currentUser', Auth::user());
}
Мой файл functions.suite.yml выглядит следующим образом:
# Codeception Test Suite Configuration
# suite for functional (integration) tests.
# emulate web requests and make application process them.
# Include one of framework modules (Symfony2, Yii2, Laravel4) to use it.
class_name: FunctionalTester
modules:
enabled: [Filesystem, FunctionalHelper, Laravel4, Asserts, Db]
Буду очень признателен за любую помощь, так как я не могу продолжать работать для своего клиента в этом проекте, пока я не уладю это.
Заранее спасибо.