Я пытаюсь запустить некоторые модульные тесты в CakePHP 3 с PHPUnit 4.7.3, но я получаю следующую ошибку:
PHPUnit 4.7.3 by Sebastian Bergmann and contributors. There was 1 error: 1) App\Test\TestCase\Model\Table\MoviesTableTest::testFindMoviesByGenre Cake\Datasource\Exception\MissingDatasourceConfigException: The datasource configuration "default" was not found. C:\xampp\htdocs\movie-pal\vendor\cakephp\cakephp\src\Datasource\ConnectionManager.php:188 C:\xampp\htdocs\movie-pal\vendor\cakephp\cakephp\src\ORM\TableRegistry.php:191 C:\xampp\htdocs\movie-pal\tests\TestCase\Model\Table\MoviesTableTest.php:17 FAILURES! Tests: 1, Assertions: 0, Errors: 1.
Я попытался следовать за книгой, но, вероятно, я что-то пропустил.
В app.php у меня есть:
'Datasources' => [ 'default' => [ 'className' => 'Cake\Database\Connection', 'driver' => 'Cake\Database\Driver\Mysql', 'persistent' => false, 'host' => 'localhost', 'username' => 'root', 'password' => '', 'database' => 'movies', 'encoding' => 'utf8', 'timezone' => 'UTC', 'cacheMetadata' => true, 'quoteIdentifiers' => false, ], 'test' => [ 'className' => 'Cake\Database\Connection', 'driver' => 'Cake\Database\Driver\Mysql', 'persistent' => false, 'host' => 'localhost', 'username' => 'root', 'password' => '', 'database' => 'test_movies', 'encoding' => 'utf8', 'timezone' => 'UTC', 'cacheMetadata' => true, 'quoteIdentifiers' => false, ], ],
Мой тестовый класс:
namespace App\Test\TestCase\Model\Table; use App\Model\Table\MoviesTable; use Cake\ORM\TableRegistry; use Cake\TestSuite\TestCase; class MoviesTableTest extends TestCase { public $fixtures = ['app.movies']; public function setUp() { parent::setUp(); $this->Movies = TableRegistry::get('Movies'); } public function testFindMoviesByGenre() { ....... } }
phpunit.xml
<?xml version="1.0" encoding="UTF-8"?> <phpunit colors="true" processIsolation="false" stopOnFailure="false" syntaxCheck="false" bootstrap="./tests/bootstrap.php" > <php> <ini name="memory_limit" value="-1"/> <ini name="apc.enable_cli" value="1"/> </php> <!-- Add any additional test suites you want to run here --> <testsuites> <testsuite name="App Test Suite"> <directory>./tests/TestCase</directory> </testsuite> <!-- Add plugin test suites here. --> </testsuites> <!-- Setup a listener for fixtures --> <listeners> <listener class="\Cake\TestSuite\Fixture\FixtureInjector" file="./vendor/cakephp/cakephp/src/TestSuite/Fixture/FixtureInjector.php"> <arguments> <object class="\Cake\TestSuite\Fixture\FixtureManager" /> </arguments> </listener> </listeners> </phpunit>
во<?xml version="1.0" encoding="UTF-8"?> <phpunit colors="true" processIsolation="false" stopOnFailure="false" syntaxCheck="false" bootstrap="./tests/bootstrap.php" > <php> <ini name="memory_limit" value="-1"/> <ini name="apc.enable_cli" value="1"/> </php> <!-- Add any additional test suites you want to run here --> <testsuites> <testsuite name="App Test Suite"> <directory>./tests/TestCase</directory> </testsuite> <!-- Add plugin test suites here. --> </testsuites> <!-- Setup a listener for fixtures --> <listeners> <listener class="\Cake\TestSuite\Fixture\FixtureInjector" file="./vendor/cakephp/cakephp/src/TestSuite/Fixture/FixtureInjector.php"> <arguments> <object class="\Cake\TestSuite\Fixture\FixtureManager" /> </arguments> </listener> </listeners> </phpunit>
во<?xml version="1.0" encoding="UTF-8"?> <phpunit colors="true" processIsolation="false" stopOnFailure="false" syntaxCheck="false" bootstrap="./tests/bootstrap.php" > <php> <ini name="memory_limit" value="-1"/> <ini name="apc.enable_cli" value="1"/> </php> <!-- Add any additional test suites you want to run here --> <testsuites> <testsuite name="App Test Suite"> <directory>./tests/TestCase</directory> </testsuite> <!-- Add plugin test suites here. --> </testsuites> <!-- Setup a listener for fixtures --> <listeners> <listener class="\Cake\TestSuite\Fixture\FixtureInjector" file="./vendor/cakephp/cakephp/src/TestSuite/Fixture/FixtureInjector.php"> <arguments> <object class="\Cake\TestSuite\Fixture\FixtureManager" /> </arguments> </listener> </listeners> </phpunit>
Проблема была в командной строке, когда я запускал свои тесты в Windows PowerShell, все было в порядке.
У меня была такая же проблема с использованием Ubuntu 14.04 (здесь не PowerShell). В моем случае проблема заключалась в том, что я запускал тесты из неправильного местоположения. Согласно документации, вы должны быть в папке с корневым каталогом приложения, чтобы правильно выполнять ваши тесты.
Поэтому в вашем случае это будет примерно так:
$ cd /path/to/your/app $ vendor/bin/phpunit tests/TestCase/Model/Table/MoviesTable